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 学习笔记(十六) js事件
Feb 01 Javascript
iframe子父页面调用js函数示例
Nov 07 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
Oct 17 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
Apr 12 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
Sep 07 Javascript
基于javascript实现动态显示当前系统时间
Jan 28 Javascript
基于JavaScript实现随机颜色输入框
Dec 10 Javascript
JavaScript获取当前时间向前推三个月的方法示例
Feb 04 Javascript
vue学习笔记之指令v-text &amp;&amp; v-html &amp;&amp; v-bind详解
May 12 Javascript
Echart折线图手柄触发事件示例详解
Dec 16 Javascript
vue模式history下在iis中配置流程
Apr 17 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
Aug 05 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和ACCESS写聊天室(六)
2006/10/09 PHP
PHP分页显示制作详细讲解
2006/12/05 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
jquery选择器使用详解
2014/04/08 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
Python中不同进制的语法及转换方法分析
2016/07/27 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
Python中的默认参数实例分析
2018/01/29 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
PHP开发的一般流程
2013/08/13 面试题
美德好少年事迹材料
2014/01/19 职场文书
公益广告宣传方案
2014/02/28 职场文书
煤矿开采专业求职信
2014/07/08 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
电影圆明园观后感
2015/06/03 职场文书
索尼ICF-36收音机评测
2022/04/30 无线电