jquery插件开发之实现md5插件


Posted in Javascript onMarch 17, 2014

方法返回的是一串十进制数,在jquery1.9.2下测试通过。

(function($){
 $.md5 = function(o) {
  if(null === o) {
   return 'null';
  }
  if(typeof o != "string") {
   return 'null';
  }
  //计算填充的长度
  var fill_data_len = 0;
  var data_len = o.length;
  var d_l_mod = data_len % MD5_BASE_LEN;
  if(0 != d_l_mod)
   fill_data_len = MD5_BASE_LEN - d_l_mod;
  if(fill_data_len < 8)
   fill_data_len += MD5_BASE_LEN;
  var buf = new Array(data_len + fill_data_len);
  for(var i = 0;i < data_len;i++)
   buf[i] = o.charCodeAt(i);
  var msg_bit_len = data_len * BYTE_BIT_LEN
  buf[data_len] = FIRST_FILL_BYTE;
  for(var i = 0;i < 4;i++) {
   buf[data_len + fill_data_len - 8 + i] =
    ((msg_bit_len & (0x000000ff << (i * 8)))
        >> (i * 8));
  }
  var md5_c = [MD5_A,MD5_B,MD5_C,MD5_D];
  var md5_code = [MD5_A,MD5_B,MD5_C,MD5_D];
  for(var m = 0;m < data_len + fill_data_len;m += 64) {
   var buf_p = new Array(16);
   for(var i = 0;i < 16;i++) {
    buf_p[i] = 0;
    for(var j = 0;j < 4;j++) {
     buf_p[i] <<= 8;
     buf_p[i] |= buf[m + j + i * 4];
    }
   }
   for(var k = 0;k < 16;k += 4) {
    md5_c[0] = FF(md5_c[0],md5_c[1],md5_c[2],
      md5_c[3],buf_p[k],7,md5_ti[k]);
    md5_c[3] = FF(md5_c[3],md5_c[0],md5_c[1],
      md5_c[2],buf_p[k + 1],12,
      md5_ti[k + 1]);
    md5_c[2] = FF(md5_c[2],md5_c[3],md5_c[0],
      md5_c[1],buf_p[k + 2],17,
      md5_ti[k + 2]);
    md5_c[1] = FF(md5_c[1],md5_c[2],md5_c[3],
      md5_c[0],buf_p[k + 3],22,
      md5_ti[k + 3]);
   }
   md5_c[0] = GG(md5_c[0],md5_c[1],md5_c[2],md5_c[3],
      buf_p[1],5,md5_ti[16]);
   md5_c[3] = GG(md5_c[3],md5_c[0],md5_c[1],md5_c[2],
      buf_p[6],9,md5_ti[17]);
   md5_c[2] = GG(md5_c[2],md5_c[3],md5_c[0],md5_c[1],
      buf_p[11],14,md5_ti[18]);
   md5_c[1] = GG(md5_c[1],md5_c[2],md5_c[3],md5_c[0],
      buf_p[0],20,md5_ti[19]);
   md5_c[0] = GG(md5_c[0],md5_c[1],md5_c[2],md5_c[3],
      buf_p[5],5,md5_ti[20]);
   md5_c[3] = GG(md5_c[3],md5_c[0],md5_c[1],md5_c[2],
      buf_p[10],9,md5_ti[21]);
   md5_c[2] = GG(md5_c[2],md5_c[3],md5_c[0],md5_c[1],
      buf_p[15],14,md5_ti[22]);
   md5_c[1] = GG(md5_c[1],md5_c[2],md5_c[3],md5_c[0],
      buf_p[4],20,md5_ti[23]);
   md5_c[0] = GG(md5_c[0],md5_c[1],md5_c[2],md5_c[3],
      buf_p[9],5,md5_ti[24]);
   md5_c[3] = GG(md5_c[3],md5_c[0],md5_c[1],md5_c[2],
      buf_p[14],9,md5_ti[25]);
   md5_c[2] = GG(md5_c[2],md5_c[3],md5_c[0],md5_c[1],
      buf_p[3],14,md5_ti[26]);
   md5_c[1] = GG(md5_c[1],md5_c[2],md5_c[3],md5_c[0],
      buf_p[8],20,md5_ti[27]);
   md5_c[0] = GG(md5_c[0],md5_c[1],md5_c[2],md5_c[3],
      buf_p[13],5,md5_ti[28]);
   md5_c[3] = GG(md5_c[3],md5_c[0],md5_c[1],md5_c[2],
      buf_p[2],9,md5_ti[29]);
   md5_c[2] = GG(md5_c[2],md5_c[3],md5_c[0],md5_c[1],
      buf_p[7],14,md5_ti[30]);
   md5_c[1] = GG(md5_c[1],md5_c[2],md5_c[3],md5_c[0],
      buf_p[12],20,md5_ti[31]);
   md5_c[0] = HH(md5_c[0],md5_c[1],md5_c[2],md5_c[3],
      buf_p[5],4,md5_ti[32]);
   md5_c[3] = HH(md5_c[3],md5_c[0],md5_c[1],md5_c[2],
      buf_p[8],11,md5_ti[33]);
   md5_c[2] = HH(md5_c[2],md5_c[3],md5_c[0],md5_c[1],
      buf_p[11],16,md5_ti[34]);
   md5_c[1] = HH(md5_c[1],md5_c[2],md5_c[3],md5_c[0],
      buf_p[14],23,md5_ti[35]);
   md5_c[0] = HH(md5_c[0],md5_c[1],md5_c[2],md5_c[3],
      buf_p[1],4,md5_ti[36]);
   md5_c[3] = HH(md5_c[3],md5_c[0],md5_c[1],md5_c[2],
      buf_p[4],11,md5_ti[37]);
   md5_c[2] = HH(md5_c[2],md5_c[3],md5_c[0],md5_c[1],
      buf_p[7],16,md5_ti[38]);
   md5_c[1] = HH(md5_c[1],md5_c[2],md5_c[3],md5_c[0],
      buf_p[10],23,md5_ti[39]);
   md5_c[0] = HH(md5_c[0],md5_c[1],md5_c[2],md5_c[3],
      buf_p[13],4,md5_ti[40]);
   md5_c[3] = HH(md5_c[3],md5_c[0],md5_c[1],md5_c[2],
      buf_p[0],11,md5_ti[41]);
   md5_c[2] = HH(md5_c[2],md5_c[3],md5_c[0],md5_c[1],
      buf_p[3],16,md5_ti[42]);
   md5_c[1] = HH(md5_c[1],md5_c[2],md5_c[3],md5_c[0],
      buf_p[6],23,md5_ti[43]);
   md5_c[0] = HH(md5_c[0],md5_c[1],md5_c[2],md5_c[3],
      buf_p[9],4,md5_ti[44]);
   md5_c[3] = HH(md5_c[3],md5_c[0],md5_c[1],md5_c[2],
      buf_p[12],11,md5_ti[45]);
   md5_c[2] = HH(md5_c[2],md5_c[3],md5_c[0],md5_c[1],
      buf_p[15],16,md5_ti[46]);
   md5_c[1] = HH(md5_c[1],md5_c[2],md5_c[3],md5_c[0],
      buf_p[2],23,md5_ti[47]);
   md5_c[0] = II(md5_c[0],md5_c[1],md5_c[2],md5_c[3],
      buf_p[0],6,md5_ti[48]);
   md5_c[3] = II(md5_c[3],md5_c[0],md5_c[1],md5_c[2],
      buf_p[7],10,md5_ti[49]);
   md5_c[2] = II(md5_c[2],md5_c[3],md5_c[0],md5_c[1],
      buf_p[14],15,md5_ti[50]);
   md5_c[1] = II(md5_c[1],md5_c[2],md5_c[3],md5_c[0],
      buf_p[5],21,md5_ti[51]);
   md5_c[0] = II(md5_c[0],md5_c[1],md5_c[2],md5_c[3],
      buf_p[12],6,md5_ti[52]);
   md5_c[3] = II(md5_c[3],md5_c[0],md5_c[1],md5_c[2],
      buf_p[3],10,md5_ti[53]);
   md5_c[2] = II(md5_c[2],md5_c[3],md5_c[0],md5_c[1],
      buf_p[10],15,md5_ti[54]);
   md5_c[1] = II(md5_c[1],md5_c[2],md5_c[3],md5_c[0],
      buf_p[1],21,md5_ti[55]);
   md5_c[0] = II(md5_c[0],md5_c[1],md5_c[2],md5_c[3],
      buf_p[8],6,md5_ti[56]);
   md5_c[3] = II(md5_c[3],md5_c[0],md5_c[1],md5_c[2],
      buf_p[15],10,md5_ti[57]);
   md5_c[2] = II(md5_c[2],md5_c[3],md5_c[0],md5_c[1],
      buf_p[6],15,md5_ti[58]);
   md5_c[1] = II(md5_c[1],md5_c[2],md5_c[3],md5_c[0],
      buf_p[13],21,md5_ti[59]);
   md5_c[0] = II(md5_c[0],md5_c[1],md5_c[2],md5_c[3],
      buf_p[4],6,md5_ti[60]);
   md5_c[3] = II(md5_c[3],md5_c[0],md5_c[1],md5_c[2],
      buf_p[11],10,md5_ti[61]);
   md5_c[2] = II(md5_c[2],md5_c[3],md5_c[0],md5_c[1],
      buf_p[2],15,md5_ti[62]);
   md5_c[1] = II(md5_c[1],md5_c[2],md5_c[3],md5_c[0],
      buf_p[9],21,md5_ti[63]);
   for(var i = 0;i < 4;i++) {
    md5_code[i] += md5_c[i];
   }
   for(var i = 0;i < 4;i++) {
    md5_c[i] = md5_code[i];
   }
  }
  var md5_code_str =  "" + md5_code[0];
  for(var i = 1;i < 4;i++)
   md5_code_str += md5_code[i];
  return md5_code_str;
 };
}(jQuery));
function F(x,y,z)
{
 return (((x) & (y)) | ((~(x)) & (z)));
}
function G(x,y,z)
{
 return (((x) & (z)) | ((y) & (~(z))));
}
function H(x,y,z)
{
 return ((x) ^ (y) ^ (z));
}
function I(x,y,z)
{
 return ((y) ^ ((x) | (~(z))));
}
function bit_rol(d,n)
{
 return (((d) <<  (n)) | ((d) >> (32 - (n))));
}
function FF(a,b,c,d,m,s,t)
{
 return b + bit_rol((a + F(b,c,d) + m + t),s);
}
function GG(a,b,c,d,m,s,t)
{
 return b + bit_rol((a + G(b,c,d) + m + t),s);
}
function HH(a,b,c,d,m,s,t)
{
 return b + bit_rol((a + H(b,c,d) + m + t),s);
}
function II(a,b,c,d,m,s,t)
{
 return b + bit_rol((a + I(b,c,d) + m + t),s);
}
var md5_ti = [
 0xd76aa478,0xe8c7b756,0x242070db,0xc1bdceee,
 0xf57c0faf,0x4787c62a,0xa8304613,0xfd469501,
 0x698098d8,0x8b44f7af,0xffff5bb1,0x895cd7be,
 0x6b901122,0xfd987193,0xa679438e,0x49b40821,
 0xf61e2562,0xc040b340,0x265e5a51,0xe9b6c7aa,
 0xd62f105d,0x02441453,0xd8a1e681,0xe7d3fbc8,
 0x21e1cde6,0xc33707d6,0xf4d50d87,0x455a14ed,
 0xa9e3e905,0xfcefa3f8,0x676f02d9,0x8d2a4c8a,
 0xfffa3942,0x8771f681,0x6d9d6122,0xfde5380c,
 0xa4beea44,0x4bdecfa9,0xf6bb4b60,0xbebfbc70,
 0x289b7ec6,0xeaa127fa,0xd4ef3085,0x04881d05,
 0xd9d4d039,0xe6db99e5,0x1fa27cf8,0xc4ac5665,
 0xf4292244,0x432aff97,0xab9423a7,0xfc93a039,
 0x655b59c3,0x8f0ccc92,0xffeff47d,0x85845dd1,
 0x6fa87e4f,0xfe2ce6e0,0xa3014314,0x4e0811a1,
 0xf7537e82,0xbd3af235,0x2ad7d2bb,0xeb86d391
];
var BYTE_BIT_LEN = 8;
var MD5_BASE_LEN = 64;
var MD5_A = 0x67452301;
var MD5_B = 0xefcdab89;
var MD5_C = 0x98badcfe;
var MD5_D = 0x10325476;
var FIRST_FILL_BYTE = 0x80;
Javascript 相关文章推荐
Javascript中找到子元素在父元素内相对位置的代码
Jul 21 Javascript
js 连接数据库如何操作数据库中的数据
Nov 23 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
Oct 17 Javascript
AngularJS语法详解
Jan 23 Javascript
Bootstrap每天必学之导航条
Nov 27 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
Aug 01 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
Mar 26 Javascript
jQuery实现的简单无刷新评论功能示例
Nov 08 jQuery
JS中获取 DOM 元素的绝对位置实例详解
Apr 23 Javascript
vue自定义filters过滤器
Apr 26 Javascript
JS实现的对象去重功能示例
Jun 04 Javascript
Vue2项目中对百度地图的封装使用详解
Jun 16 Vue.js
js对图片base64编码字符串进行解码并输出图像示例
Mar 17 #Javascript
javascript文件中引用依赖的js文件的方法
Mar 17 #Javascript
jquery解析JSON数据示例代码
Mar 17 #Javascript
javascript事件函数中获得事件源的两种不错方法
Mar 17 #Javascript
javascript内置对象arguments详解
Mar 16 #Javascript
javascript跨浏览器的属性判断方法
Mar 16 #Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
Mar 16 #Javascript
You might like
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
php zend解密软件绿色版测试可用
2008/04/14 PHP
php 在文件指定行插入数据的代码
2010/05/08 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
angular.bind使用心得
2015/10/26 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
Python中文编码那些事
2014/06/25 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
python map比for循环快在哪
2020/09/21 Python
巴黎一票通:The Paris Pass
2018/02/10 全球购物
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
网络程序员自荐信
2014/01/25 职场文书
思想品德课教学反思
2014/02/10 职场文书
家长对孩子的评语
2014/04/18 职场文书
励志演讲稿500字
2014/08/21 职场文书
连锁超市项目计划书
2014/09/15 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
干部理论学习心得体会
2016/01/21 职场文书
详解PyTorch模型保存与加载
2022/04/28 Python