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 相关文章推荐
jQuery提交表单ajax查询实例代码
Oct 07 Javascript
JavaScript等比例缩放图片控制超出范围的图片
Aug 06 Javascript
快速解决FusionCharts联动的中文乱码问题
Dec 04 Javascript
AngularJS的内置过滤器详解
May 14 Javascript
基于jQuery实现页面搜索功能
Mar 26 Javascript
AngularJS基础 ng-csp 指令详解
Aug 01 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
Sep 06 Javascript
Vue.js如何实现路由懒加载浅析
Aug 14 Javascript
vue数据操作之点击事件实现num加减功能示例
Jan 19 Javascript
使用js在layui中实现上传图片压缩
Jun 18 Javascript
Vue实现滑动拼图验证码功能
Sep 15 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
Oct 12 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
第五节 克隆 [5]
2006/10/09 PHP
PHP 中dirname(_file_)讲解
2007/03/18 PHP
php 表单数据的获取代码
2009/03/10 PHP
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
微信小程序实现下拉菜单切换效果
2020/03/30 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
Python中使用pprint函数进行格式化输出的教程
2015/04/07 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
python实现八大排序算法(2)
2017/09/14 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
python简单商城购物车实例代码
2018/03/15 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
Pytorch中.new()的作用详解
2020/02/18 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
墨西哥网上超市:Superama
2018/07/10 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
美国精油公司:Plant Therapy
2019/05/17 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
学生生病请假条范文
2014/02/16 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python
OpenCV-Python实现油画效果的实例
2021/06/08 Python