JavaScript实现的encode64加密算法实例分析
来源: 阅读:1144 次 日期:2015-04-20 14:08:10
温馨提示: 小编为您整理了“JavaScript实现的encode64加密算法实例分析”,方便广大网友查阅!

这段JavaScript代码可实现encode64加密算法,速度还是相当不错的。

//encode64编解码

(function() {

var codeChar = "PaAwO65goUf7IK2vi9-xq8cFTEXLCDY1Hd3tV0ryzjbpN_BlnSs4mGRkQWMZJeuh";

window.encode64 = function(str) {

var s = "";

var a = strToBytes(str);

//取得字串的字节数组, 数组长度是字串长度的2倍.

var res = a.length % 3;

//3个字节一组进行处理, 余下特殊处理

var i = 2, v;

for (; i < a.length; i += 3) {

//每3个字节用4个字符表示,

//相当于3个字符(实际上是6个字节)用8个字符编码(实际为16个字节)

//看起来容量膨胀了很多, 但是在启用压缩的情况下, 这些又被抵消掉了

v = a[i - 2] + (a[i - 1] << 8) + (a[i] << 16);

s += codeChar.charAt(v & 0x3f);

s += codeChar.charAt((v >> 6) & 0x3f);

s += codeChar.charAt((v >> 12) & 0x3f);

s += codeChar.charAt((v >> 18));

}

if (res == 1) {//字节余一位时候, 补2个字符, 64*64>256

v = a[i - 2];

s += codeChar.charAt(v & 0x3f);

s += codeChar.charAt((v >> 6) & 0x3f);

} else if (res == 2) {

//字节余2位的时候, 补3个字节, 64*64*64>256*256, 所以是可行的

v = a[i - 2] + (a[i - 1] << 8);

s += codeChar.charAt(v & 0x3f);

s += codeChar.charAt((v >> 6) & 0x3f);

s += codeChar.charAt((v >> 12) & 0x3f);

}

return s;

};

window.decode64 = function(codeStr) {

var dic = [];

for (var i = 0; i < codeChar.length; i++) {

dic[codeChar.charAt(i)] = i;

}

var code = [];

var res = codeStr.length % 4;

var i = 3, v;

for (; i < codeStr.length; i += 4) {

v = dic[codeStr.charAt(i - 3)];

v += dic[codeStr.charAt(i - 2)] << 6;

v += dic[codeStr.charAt(i - 1)] << 12;

v += dic[codeStr.charAt(i)] << 18;

code.push(v & 0xff, (v >> 8) & 0xff, (v >> 16) & 0xff);

}

if (res == 2) {

//正确的字节数肯定是余2或3, 没有1的情况, 如果出现, 舍弃.

v = dic[codeStr.charAt(i - 3)];

v += dic[codeStr.charAt(i - 2)] << 6;

code.push(v & 0xff);

} else if (res == 3) {

v = dic[codeStr.charAt(i - 3)];

v += dic[codeStr.charAt(i - 2)] << 6;

v += dic[codeStr.charAt(i - 1)] << 12;

code.push(v & 0xff, (v >> 8) & 0xff);

}

return strFromBytes(code);

};

})();

更多信息请查看IT技术专栏

更多信息请查看脚本栏目
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map