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 相关文章推荐
Maps Javascript
Jan 22 Javascript
jQuery html()等方法介绍
Nov 18 Javascript
js弹出层之1:JQuery.Boxy (二)
Oct 06 Javascript
javascript如何判断输入的url是否正确
Apr 11 Javascript
js实现数组转换成json
Jun 26 Javascript
JavaScript的RequireJS库入门指南
Jul 01 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
Feb 18 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
Jul 05 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
Sep 28 Javascript
Vue程序调试的方法
Jun 17 Javascript
JS实现给数组对象排序的方法分析
Jun 24 Javascript
基于elementUI竖向表格、和并列的案例
Oct 26 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
PHP SQLite类
2009/05/07 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
使用php清除bom示例
2014/03/03 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
PHP数据库操作三:redis用法分析
2017/08/16 PHP
jQuery把表单元素变为json对象
2013/11/06 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
原生JS实现日历组件的示例代码
2017/09/22 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
python 文件和路径操作函数小结
2009/11/23 Python
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
python高级特性简介
2020/08/13 Python
浅析python函数式编程
2020/09/26 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
党支部2014年度工作总结
2014/12/04 职场文书
初中教师个人总结
2015/02/10 职场文书
个人先进事迹总结
2015/02/26 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
教师节随笔
2015/08/15 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
浅析Python中的套接字编程
2021/06/22 Python
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers