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 相关文章推荐
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
js自定义事件及事件交互原理概述(二)
Feb 01 Javascript
jQuery在html有效在jsp无效的原因及解决方法
Aug 02 Javascript
JavaScript通过正则表达式实现表单验证电话号码
Mar 07 Javascript
jQuery获取iframe的document对象的方法
Oct 10 Javascript
28个常用JavaScript方法集锦
Jan 14 Javascript
AngularJS基础 ng-focus 指令简单示例
Aug 01 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
May 11 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
Mar 20 Javascript
Vue实现6位数密码效果
Aug 18 Javascript
深入Node TCP模块的理解
Mar 13 Javascript
详解JavaScript执行模型
Nov 16 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 pki加密技术(openssl)详解
2013/07/01 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
2014/10/20 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
JS异步加载的三种实现方式
2017/03/16 Javascript
Vuex 入门教程
2018/01/10 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
python复制与引用用法分析
2015/04/08 Python
Python三级菜单的实例
2017/09/13 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
Python图像读写方法对比
2020/11/16 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
临床医师专业个人自我评价范文
2013/11/07 职场文书
人事专员岗位职责
2013/11/20 职场文书
法制教育演讲稿
2014/09/10 职场文书
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers
使用Redis实现分布式锁的方法
2022/06/16 Redis
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技
Redis过期数据是否会被立马删除
2022/07/23 Redis