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简化JavaScript开发分析
Feb 19 Javascript
入门基础学习 ExtJS笔记(一)
Nov 11 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
Jan 15 Javascript
javascript中数组中求最大值示例代码
Dec 18 Javascript
javascript常用的正则表达式实例
May 15 Javascript
逻辑表达式中与或非的用法详解
Jun 06 Javascript
对jQuary选择器的全面总结
Jun 20 Javascript
获取input标签的所有属性的方法
Jun 28 Javascript
AngularJS基础 ng-cloak 指令简单示例
Aug 01 Javascript
AngularJS教程 ng-style 指令简单示例
Aug 03 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
Mar 02 Javascript
跟混乱的页面弹窗说再见
Apr 11 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缓冲区为你的站点加速
2015/10/10 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
[原创]jQuery常用的4种加载方式分析
2016/07/25 Javascript
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
Python中的面向对象编程详解(下)
2015/04/13 Python
python安装oracle扩展及数据库连接方法
2017/02/21 Python
Python实现的购物车功能示例
2018/02/11 Python
python smtplib发送带附件邮件小程序
2018/05/22 Python
python创建文件时去掉非法字符的方法
2018/10/31 Python
numpy向空的二维数组中添加元素的方法
2018/11/01 Python
Python操作json的方法实例分析
2018/12/06 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
工伤赔偿协议书
2014/04/15 职场文书
小学二年级评语
2014/04/21 职场文书
社团活动总结范文
2014/04/26 职场文书
投标保密承诺书
2014/05/19 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL
MYSQL如何查看进程和kill进程
2022/03/13 MySQL