function base64Encode(%str)
{
%len = strLen(%str);
for(%i = 0; %i < %len; %i++)
{
%chr = getSubStr(%str,%i,1);
%ascii = strPos($Basetype[256],%chr) + 32;
%bin = convertBase(%ascii,$Basetype[10],$Basetype[2]);
%bin = padBase(%bin,$Basetype[2],8);
%all = %all @ %bin;
}
%len = strLen(%all);
for(%i = 0; %i < %len; %i += 6)
{
%pack = getSubStr(%all,%i,6);
while(strLen(%pack) < 6)
%pack = %pack @ "0";
%dec = convertBase(%pack,$Basetype[2],$Basetype[10]);
%new = %new @ getSubStr($Basetype[64],%dec,1);
}
while(strLen(%new) % 4 > 0)
%new = %new @ "=";
return %new;
}
function base64Encode_Nulls(%str)
{
%len = getWordCount(%str);
for(%i = 0; %i < %len; %i++)
{
%dec = getWord(%str,%i);
%bin = convertBase(%dec,$Basetype[10],$Basetype[2]);
%bin = padBase(%bin,$Basetype[2],8);
%all = %all @ %bin;
}
%len = strLen(%all);
for(%i = 0; %i < %len; %i += 6)
{
%pack = getSubStr(%all,%i,6);
while(strLen(%pack) < 6)
%pack = %pack @ "0";
%dec = convertBase(%pack,$Basetype[2],$Basetype[10]);
%new = %new @ getSubStr($Basetype[64],%dec,1);
}
while(strLen(%new) % 4 > 0)
%new = %new @ "=";
return %new;
}
function base64Decode(%str)
{
while(getSubStr(%str,strLen(%str) - 1,1) $= "=")
%str = getSubStr(%str,0,strLen(%str) - 1);
%len = strLen(%str);
for(%i = 0; %i < %len; %i++)
{
%chr = getSubStr(%str,%i,1);
%pos = strPos($Basetype[64],%chr);
%bin = convertBase(%pos,$Basetype[10],$Basetype[2]);
%bin = padBase(%bin,$Basetype[2],6);
%all = %all @ %bin;
}
while(strLen(%all) % 8 > 0)
%all = getSubStr(%all,0,strLen(%all) - 1);
%len = strLen(%all);
for(%i = 0; %i < %len; %i += 8)
{
%bin = getSubStr(%all,%i,8);
%dec = convertBase(%bin,$Basetype[2],$Basetype[10]) - 32;
%chr = getSubStr($Basetype[256],%dec,1);
%new = %new @ %chr;
}
return %new;
}
nulls is for strings with nulls (?)