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 相关文章推荐
js获取浏览器的可视区域尺寸的实现代码
Nov 30 Javascript
使用不同的方法结合/合并两个JS数组
Sep 18 Javascript
JavaScript阻止事件冒泡示例分享
Dec 28 Javascript
javascript中new关键字详解
Dec 14 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
Aug 23 Javascript
JS制作类似选项卡切换的年历
Dec 03 Javascript
angular select 默认值设置方法
Jun 23 Javascript
node前端模板引擎Jade之标签的基本写法
May 11 Javascript
图片文字识别(OCR)插件Ocrad.js教程
Nov 26 Javascript
Node.js学习教程之Module模块
Sep 03 Javascript
javascript实现电商放大镜效果
Nov 23 Javascript
vue el-upload上传文件的示例代码
Dec 21 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
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
浅析ThinkPHP的模板输出功能
2014/07/01 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
Python GUI编程完整示例
2019/04/04 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
Python的缺点和劣势分析
2019/11/19 Python
python自动点赞功能的实现思路
2020/02/26 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
白酒业务员岗位职责
2013/12/27 职场文书
电焊工岗位职责
2014/03/06 职场文书
小学生清明节演讲稿
2014/09/05 职场文书
个人四风问题整改措施
2014/10/24 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
生死抉择观后感
2015/06/09 职场文书
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电