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 相关文章推荐
自己实现ajax封装示例分享
Apr 01 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
Jul 02 Javascript
Node.js+Express配置入门教程
May 19 Javascript
Angular Module声明和获取重载实例代码
Sep 14 Javascript
基于jquery实现弹幕效果
Sep 29 Javascript
JavaScript设计模式之策略模式详解
Jun 09 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
Apr 26 jQuery
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
vue集成百度UEditor富文本编辑器使用教程
Sep 21 Javascript
JS开发 富文本编辑器TinyMCE详解
Jul 19 Javascript
js Math数学简单使用操作示例
Mar 13 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
JavaScript打字小游戏代码
2011/12/26 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
详解Python函数作用域的LEGB顺序
2016/05/14 Python
Python正则表达式教程之一:基础篇
2017/03/02 Python
python字典DICT类型合并详解
2017/08/17 Python
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
python重试装饰器的简单实现方法
2019/01/31 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
零基础小白多久能学会python
2020/06/22 Python
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
有关爱国演讲稿
2014/05/07 职场文书
党性教育心得体会
2014/09/03 职场文书
长城导游词400字
2015/01/30 职场文书
银行求职信模板
2015/03/20 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
2016情人节宣传语
2015/07/14 职场文书
运动会入场词
2015/07/18 职场文书
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL
netty 实现tomcat的示例代码
2022/06/05 Servers