getCharCode : function(char) { if ( char == '+' ) { return 62; } else if ( char == '/' ) { return 63; } else if ( char == '=' ) { return 0; } else { return this[char]; } } }; function EncodeBase64(string) { var hexString = string.getGBCode(); window.status = hexString; var base64 = ''; var B64A = Base64Alphabet; var padCount = hexString.length%3; var count = parseInt(hexString.length/6); var i = 0; for ( i=0 ; i < count ; ++i ) { var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16); var intB = parseInt(hexString.charAt(i*6+2)+hexString.charAt(i*6+3), 16); var intC = parseInt(hexString.charAt(i*6+4)+hexString.charAt(i*6+5), 16); var part1 = intA >> 2; var part2 = ((intA & 0x03) << 4) | (intB >> 4); var part3 = ((intB & 0x0f) << 2) | (intC >> 6); var part4 = intC & 0x3f; base64 += B64A[part1] + B64A[part2] + B64A[part3] + B64A[part4]; } if ( padCount == 1 ) { var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16); var intB = parseInt(hexString.charAt(i*6+2)+hexString.charAt(i*6+3), 16); var part1 = intA >> 2; var part2 = ((intA & 0x03) << 4) | (intB >> 4); var part3 = ((intB & 0x0f) << 2); base64 += B64A[part1] + B64A[part2] + B64A[part3] + '='; } if ( padCount == 2 ) { var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16); var part1 = intA >> 2; var part2 = ((intA & 0x03) << 4); base64 += B64A[part1] + B64A[part2] + '=='; } return base64; } </SCRIPT><SCRIPT language=vbscript> function vbGetGBCode(str) dim i, length, s length = len(str) for i=1 to length hexCode = hex(asc(str.charAt(i-1))) if (len(hexCode) mod 2) = 0 then s = s & hexCode else s = s & "0" & hexCode end if next vbGetGBCode = s end function </SCRIPT><SCRIPT language=javascript> String.prototype.getGBCode = function() { return vbGetGBCode(this); } </SCRIPT> <BUTTON onclick=Run2()>decode</BUTTON> <TEXTAREA id=decode style="WIDTH: 100%" rows=10></TEXTAREA> <SCRIPT language=javascript> function Run2() { decode.value = DecodeBase64(encode.value); } </SCRIPT><SCRIPT language=javascript> var Base64Alphabet2 = { 'A' : 0, 'B' : 1, 'C' : 2, 'D' : 3, 'E' : 4, 'F' : 5, 'G' : 6, 'H' : 7, 'I' : 8, 'J' : 9, 'K' : 10, 'L' : 11, 'M' : 12, 'N' : 13, 'O' : 14, 'P' : 15, 'Q' : 16, 'R' : 17, 'S' : 18, 'T' : 19, 'U' : 20, 'V' : 21, 'W' : 22, 'X' : 23, 'Y' : 24, 'Z' : 25, 'a' : 26, 'b' : 27, 'c' : 28, 'd' : 29, 'e' : 30, 'f' : 31, 'g' : 32, 'h' : 33, 'i' : 34, 'j' : 35, 'k' : 36, 'l' : 37, 'm' : 38, 'n' : 39, 'o' : 40, 'p' : 41, 'q' : 42, 'r' : 43, 's' : 44, 't' : 45, 'u' : 46, 'v' : 47, 'w' : 48, 'x' : 49, 'y' : 50, 'z' : 51, '0' : 52, '1' : 53, '2' : 54, '3' : 55, '4' : 56, '5' : 57, '6' : 58, '7' : 59, '8' : 60, '9' : 61,
getCharCode : function(char) { if ( char == '+' ) { return 62; } else if ( char == '/' ) { return 63; } else if ( char == '=' ) { return 0; } else { return this[char]; } } }; function DecodeBase64(strCoding) { strCoding = strCoding.replace(/\s+/g, ''); var padCount = 0; if ( strCoding.charAt(strCoding.length-2) == '=' ) { padCount = 2; } else if ( strCoding.charAt(strCoding.length-1) == '=' ) { padCount = 1; } var count = strCoding.length/4; var hexString = ''; var B64A2 = Base64Alphabet2; for ( var i=0 ; i < count ; ++i ) { var part1 = B64A2.getCharCode(strCoding.charAt(i*4)); var part2 = B64A2.getCharCode(strCoding.charAt(i*4+1)); var part3 = B64A2.getCharCode(strCoding.charAt(i*4+2)); var part4 = B64A2.getCharCode(strCoding.charAt(i*4+3)); var intA = (part1 << 2) | (part2 >> 4); var intB = ((part2 & 0x0f ) << 4) | (part3 >> 2); var intC = ((part3 & 0x03 ) << 6) | part4; if ( intA < 0x10 ) { hexString += '0'; } hexString += intA.toString(16); if ( intB < 0x10 ) { hexString += '0'; } hexString += intB.toString(16); if ( intC < 0x10 ) { hexString += '0'; } hexString += intC.toString(16); } if ( padCount > 0 ) { hexString = hexString.substr(0, hexString.length-padCount*2); } return hexString.getString(); } function jsParseInt(numString, radix) { return parseInt(numString, radix); }
String.prototype.getString = function() { return vbGetString(this); } </SCRIPT><SCRIPT language=vbscript> function vbGetString(hexString) dim i, length, s length = Len(hexString)/2 for i=1 to length charCode = jsParseInt(Mid(hexString, i*2-1, 2), 16) if charCode < &H7F then s = s & Chr(charCode) else s = s & Chr(jsParseInt(Mid(hexString, i*2-1, 4), 16)) i = i+1 end if next vbGetString = s end function </SCRIPT> </BODY></HTML>
5Lit5Zu9的再编码是
NUxpdDVadTk=
<META content="MSHTML 6.00.2800.1578" name=GENERATOR></HEAD>
<BODY><TEXTAREA id=original style="WIDTH: 100%" rows=10>博客园</TEXTAREA><BUTTON onclick=Run()>encode</BUTTON> <TEXTAREA id=encode style="WIDTH: 100%" rows=10></TEXTAREA>
<SCRIPT language=javascript>
function Run()
{
var originalString = original.value;
encode.value = EncodeBase64(originalString);
}
var Base64Alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'];
var Base64Alphabet2 =
{
'A' : 0, 'B' : 1, 'C' : 2, 'D' : 3, 'E' : 4, 'F' : 5, 'G' : 6, 'H' : 7, 'I' : 8, 'J' : 9, 'K' : 10, 'L' : 11,
'M' : 12, 'N' : 13, 'O' : 14, 'P' : 15, 'Q' : 16, 'R' : 17, 'S' : 18, 'T' : 19, 'U' : 20, 'V' : 21,
'W' : 22, 'X' : 23, 'Y' : 24, 'Z' : 25, 'a' : 26, 'b' : 27, 'c' : 28, 'd' : 29, 'e' : 30, 'f' : 31,
'g' : 32, 'h' : 33, 'i' : 34, 'j' : 35, 'k' : 36, 'l' : 37, 'm' : 38, 'n' : 39, 'o' : 40, 'p' : 41,
'q' : 42, 'r' : 43, 's' : 44, 't' : 45, 'u' : 46, 'v' : 47, 'w' : 48, 'x' : 49, 'y' : 50, 'z' : 51,
'0' : 52, '1' : 53, '2' : 54, '3' : 55, '4' : 56, '5' : 57, '6' : 58, '7' : 59, '8' : 60, '9' : 61,
getCharCode : function(char)
{
if ( char == '+' )
{
return 62;
}
else if ( char == '/' )
{
return 63;
}
else if ( char == '=' )
{
return 0;
}
else
{
return this[char];
}
}
};
function EncodeBase64(string)
{
var hexString = string.getGBCode();
window.status = hexString;
var base64 = '';
var B64A = Base64Alphabet;
var padCount = hexString.length%3;
var count = parseInt(hexString.length/6);
var i = 0;
for ( i=0 ; i < count ; ++i )
{
var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16);
var intB = parseInt(hexString.charAt(i*6+2)+hexString.charAt(i*6+3), 16);
var intC = parseInt(hexString.charAt(i*6+4)+hexString.charAt(i*6+5), 16);
var part1 = intA >> 2;
var part2 = ((intA & 0x03) << 4) | (intB >> 4);
var part3 = ((intB & 0x0f) << 2) | (intC >> 6);
var part4 = intC & 0x3f;
base64 += B64A[part1] + B64A[part2] + B64A[part3] + B64A[part4];
}
if ( padCount == 1 )
{
var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16);
var intB = parseInt(hexString.charAt(i*6+2)+hexString.charAt(i*6+3), 16);
var part1 = intA >> 2;
var part2 = ((intA & 0x03) << 4) | (intB >> 4);
var part3 = ((intB & 0x0f) << 2);
base64 += B64A[part1] + B64A[part2] + B64A[part3] + '=';
}
if ( padCount == 2 )
{
var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16);
var part1 = intA >> 2;
var part2 = ((intA & 0x03) << 4);
base64 += B64A[part1] + B64A[part2] + '==';
}
return base64;
}
</SCRIPT><SCRIPT language=vbscript>
function vbGetGBCode(str)
dim i, length, s
length = len(str)
for i=1 to length
hexCode = hex(asc(str.charAt(i-1)))
if (len(hexCode) mod 2) = 0 then
s = s & hexCode
else
s = s & "0" & hexCode
end if
next
vbGetGBCode = s
end function
</SCRIPT><SCRIPT language=javascript>
String.prototype.getGBCode = function()
{
return vbGetGBCode(this);
}
</SCRIPT>
<BUTTON onclick=Run2()>decode</BUTTON> <TEXTAREA id=decode style="WIDTH: 100%" rows=10></TEXTAREA>
<SCRIPT language=javascript>
function Run2()
{
decode.value = DecodeBase64(encode.value);
}
</SCRIPT><SCRIPT language=javascript>
var Base64Alphabet2 =
{
'A' : 0, 'B' : 1, 'C' : 2, 'D' : 3, 'E' : 4, 'F' : 5, 'G' : 6, 'H' : 7, 'I' : 8, 'J' : 9, 'K' : 10, 'L' : 11,
'M' : 12, 'N' : 13, 'O' : 14, 'P' : 15, 'Q' : 16, 'R' : 17, 'S' : 18, 'T' : 19, 'U' : 20, 'V' : 21,
'W' : 22, 'X' : 23, 'Y' : 24, 'Z' : 25, 'a' : 26, 'b' : 27, 'c' : 28, 'd' : 29, 'e' : 30, 'f' : 31,
'g' : 32, 'h' : 33, 'i' : 34, 'j' : 35, 'k' : 36, 'l' : 37, 'm' : 38, 'n' : 39, 'o' : 40, 'p' : 41,
'q' : 42, 'r' : 43, 's' : 44, 't' : 45, 'u' : 46, 'v' : 47, 'w' : 48, 'x' : 49, 'y' : 50, 'z' : 51,
'0' : 52, '1' : 53, '2' : 54, '3' : 55, '4' : 56, '5' : 57, '6' : 58, '7' : 59, '8' : 60, '9' : 61,
getCharCode : function(char)
{
if ( char == '+' )
{
return 62;
}
else if ( char == '/' )
{
return 63;
}
else if ( char == '=' )
{
return 0;
}
else
{
return this[char];
}
}
};
function DecodeBase64(strCoding)
{
strCoding = strCoding.replace(/\s+/g, '');
var padCount = 0;
if ( strCoding.charAt(strCoding.length-2) == '=' )
{
padCount = 2;
}
else if ( strCoding.charAt(strCoding.length-1) == '=' )
{
padCount = 1;
}
var count = strCoding.length/4;
var hexString = '';
var B64A2 = Base64Alphabet2;
for ( var i=0 ; i < count ; ++i )
{
var part1 = B64A2.getCharCode(strCoding.charAt(i*4));
var part2 = B64A2.getCharCode(strCoding.charAt(i*4+1));
var part3 = B64A2.getCharCode(strCoding.charAt(i*4+2));
var part4 = B64A2.getCharCode(strCoding.charAt(i*4+3));
var intA = (part1 << 2) | (part2 >> 4);
var intB = ((part2 & 0x0f ) << 4) | (part3 >> 2);
var intC = ((part3 & 0x03 ) << 6) | part4;
if ( intA < 0x10 )
{
hexString += '0';
}
hexString += intA.toString(16);
if ( intB < 0x10 )
{
hexString += '0';
}
hexString += intB.toString(16);
if ( intC < 0x10 )
{
hexString += '0';
}
hexString += intC.toString(16);
}
if ( padCount > 0 )
{
hexString = hexString.substr(0, hexString.length-padCount*2);
}
return hexString.getString();
}
function jsParseInt(numString, radix)
{
return parseInt(numString, radix);
}
String.prototype.getString = function()
{
return vbGetString(this);
}
</SCRIPT><SCRIPT language=vbscript>
function vbGetString(hexString)
dim i, length, s
length = Len(hexString)/2
for i=1 to length
charCode = jsParseInt(Mid(hexString, i*2-1, 2), 16)
if charCode < &H7F then
s = s & Chr(charCode)
else
s = s & Chr(jsParseInt(Mid(hexString, i*2-1, 4), 16))
i = i+1
end if
next
vbGetString = s
end function
</SCRIPT>
</BODY></HTML>
举个例子,"中"这个字
转成可变长度字节的unicode码为E4B8AD
转成2进制为
1110 0100 1011 1000 1010 1101
然后经过base64加密后的编码为
0011 1001 0000 1011 0010 0010 0010 1101
转成索引4个字节为
57,11,34,44
经过索引去找base64的串的值5Lit