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 eval解析JSON中的注意点介绍
Aug 23 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
Aug 11 Javascript
用svg制作富有动态的tooltip
Jul 17 Javascript
关于js里的this关键字的理解
Aug 17 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
JS留言功能的简单实现案例(推荐)
Jun 23 Javascript
bootstrap提示标签、提示框实现代码
Dec 28 Javascript
vue.js学习之UI组件开发教程
Jul 03 Javascript
Vue 2.0的数据依赖实现原理代码简析
Jul 10 Javascript
vue-cli 首屏加载优化问题
Nov 06 Javascript
Vue.js组件props数据验证实现详解
Oct 19 Javascript
Vue 打包后相对路径的引用问题
Jun 05 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
德生PL330测评
2021/03/02 无线电
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
JavaScript全局函数使用简单说明
2011/03/11 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
python 中的divmod数字处理函数浅析
2017/10/17 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
会计自我鉴定范文
2013/10/06 职场文书
大学生咖啡店创业计划书
2014/01/21 职场文书
消防安全管理制度
2014/02/01 职场文书
通用自荐信范文
2014/03/14 职场文书
以权谋私检举信范文
2015/03/02 职场文书
纪委立案决定书
2015/06/24 职场文书
运输公司工作总结
2015/08/11 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
React实现动效弹窗组件
2021/06/21 Javascript
如何使用pdb进行Python调试
2021/06/30 Python
Python机器学习之决策树和随机森林
2021/07/15 Javascript