JavaScript实现的encode64加密算法实例分析


Posted in Javascript onApril 15, 2015

本文实例讲述了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);
 };
})();

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
javascript一些不错的函数脚本代码
Sep 10 Javascript
ExtJs扩展之GroupPropertyGrid代码
Mar 05 Javascript
说明你的Javascript技术很烂的五个原因
Apr 26 Javascript
ejs v9 javascript模板系统
Mar 21 Javascript
js创建表单元素并使用submit进行提交
Aug 14 Javascript
js实现带按钮的上下滚动效果
May 12 Javascript
png在IE6 下无法透明的解决方法汇总
May 21 Javascript
JQuery的Pager分页器实现代码
May 03 Javascript
Javascript实现图片懒加载插件的方法
Oct 20 Javascript
Vue.js项目模板搭建图文教程
Sep 20 Javascript
Node.js静态服务器的实现方法
Feb 28 Javascript
javascript操作向表格中动态加载数据
Aug 27 Javascript
JavaScript实现拖拽网页内元素的方法
Apr 15 #Javascript
jQuery+html5实现div弹出层并遮罩背景
Apr 15 #Javascript
jquery实现简单的无缝滚动
Apr 15 #Javascript
JQuery CheckBox(复选框)操作方法汇总
Apr 15 #Javascript
JQuery select(下拉框)操作方法汇总
Apr 15 #Javascript
JavaScript控制网页层收起和展开效果的方法
Apr 15 #Javascript
JS扩展方法实例分析
Apr 15 #Javascript
You might like
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
jQuery遍历Table应用示例
2014/04/09 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
JS中的三个循环小结
2017/06/20 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
python比较两个列表是否相等的方法
2015/07/28 Python
python 获取url中的参数列表实例
2018/12/18 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
python 获取字典键值对的实现
2020/11/12 Python
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
中专生自荐信
2013/10/12 职场文书
自荐信格式
2013/12/01 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
校园安全标语
2014/06/07 职场文书
企业委托书范本
2014/09/13 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
小型婚礼主持词
2015/06/30 职场文书
中秋节祝酒词
2015/08/12 职场文书
解决golang 关于全局变量的坑
2021/05/06 Golang
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS