<script language="javascript"> function DecodeBase64(strCoding) { strCoding = strCoding.replace(//s+/g, ''); var padCount =0; if ( strCoding.charAt(strCoding.length-2) == '=' ) { padCount =2; } elseif ( 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=1to 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 endif next vbGetString = s end function </script>
这个解码代码中还有两个地方可以优化,一是part1、part2、part3和part4那里,可以使用一个part数组 var part = new Array(4); 然后从strCoding里面去遍历4个连续有效的字符出来,然后再求intA,intB,intC。这样就可以省去解码开始前的数据清理工作 strCoding = strCoding.replace(//s+/g, '');,同时还可以忽略非Base64Alphabet中定义的字符带来的错误干扰。二是intA、intB和intC也可以用一个数组来做,这样就可以把代码: