JavaScript实现的encode64加密算法实例分析

 更新时间:2015年04月15日 15:07:15   作者:ishare  
这篇文章主要介绍了JavaScript实现的encode64加密算法,实例分析了javascript处理encode64编码针对字符串加密的技巧,非常简洁实用,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助。

相关文章

  • 防止文件缓存的js代码

    防止文件缓存的js代码

    原理其实就是通过在固定地址后面,加上一个不同值的日期数值,以达到地址不重复的目的,让浏览器每次都实时加载,不从缓存中读取文件
    2013-01-01
  • JavaScript数组去重的3种方法和代码实例

    JavaScript数组去重的3种方法和代码实例

    这篇文章主要介绍了JavaScript数组去重的3种方法和代码实例,本文直接给出实例代码,需要的朋友可以参考下
    2015-07-07
  • 用javascript代替marquee的滚动字幕效果代码

    用javascript代替marquee的滚动字幕效果代码

    用javascript代替marquee的滚动字幕效果代码...
    2007-04-04
  • 微信小程序如何保证每个页面都已经登陆详解

    微信小程序如何保证每个页面都已经登陆详解

    前段时间发布了一个微信小程序的简单登录,但遇到一个问题,怎么确保用户每个页面都已经登陆了呢,这篇文章主要给大家介绍了关于微信小程序如何保证每个页面都已经登陆的相关资料,需要的朋友可以参考下
    2021-11-11
  • JavaScript 中的 this 简单规则

    JavaScript 中的 this 简单规则

    想要确定this里规则是什么,其实方法很简单,通过检查它的调用位置,在函数被调用的时候确定this,下面就跟随脚本之家小编一起通过本文学习吧
    2017-09-09
  • 让javascript加载速度倍增的方法(解决JS加载速度慢的问题)

    让javascript加载速度倍增的方法(解决JS加载速度慢的问题)

    这篇文章主要介绍了让javascript加载速度倍增的方法,通过document.write输出js解决广告加载速度慢的问题,需要的朋友可以参考下
    2014-12-12
  • js实现简单模态窗口,背景灰显

    js实现简单模态窗口,背景灰显

    昨天中午做项目需要一个模态窗口,想起上一个公司的项目经理曾经做过一个比较牛的模态窗口,至今没用搞清楚实现原理,平时也没有时间去分析,试着自己做了一个,用了一天的时间终于完成了,给大家一起分享, 也希望高手多提意见。第一次在博客园上发文章,挺高兴的。
    2008-11-11
  • bootstrap选项卡扩展功能详解

    bootstrap选项卡扩展功能详解

    这篇文章主要为大家详细介绍了bootstrap选项卡扩展功能,增加关闭,超出一行显示下拉,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 重新理解JavaScript的六种继承方式

    重新理解JavaScript的六种继承方式

    通过本文带领大家一起重新理解JavaScript的六种继承方式,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • JS实现超精简的链接列表在固定区域内滚动效果代码

    JS实现超精简的链接列表在固定区域内滚动效果代码

    这篇文章主要介绍了JS实现超精简的链接列表在固定区域内滚动效果代码,非常常见的页面元素属性变换控制实现滚动效果,简单实用,需要的朋友可以参考下
    2015-11-11

最新评论