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 程序库的比较(一)之DOM功能
Apr 07 Javascript
JavaScript中去掉数组中的重复值的实现方法
Aug 03 Javascript
ExtJS DOM元素操作经验分享
Aug 28 Javascript
jQuery树形下拉菜单特效代码分享
Aug 15 Javascript
日常收集整理的JavaScript常用函数方法
Dec 10 Javascript
给easyui的datebox控件添加清空按钮的实现方法
Nov 09 Javascript
JavaScript闭包_动力节点Java学院整理
Jun 27 Javascript
Echarts基本用法_动力节点Java学院整理
Aug 11 Javascript
Vue中使用Sortable的示例代码
Apr 07 Javascript
Vue在页面数据渲染完成之后的调用方法
Sep 11 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
Sep 10 Javascript
Postman无法正常返回结果问题解决
Aug 28 Javascript
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
地摊中国 - 珍藏老照片
2020/08/18 杂记
PHP MSSQL 存储过程的方法
2008/12/24 PHP
php反射应用示例
2014/02/25 PHP
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
Textarea输入字数限制实例(兼容iOS&amp;安卓)
2017/07/06 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
使用Python生成随机密码的示例分享
2016/02/18 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Python3连接MySQL(pymysql)模拟转账实现代码
2016/05/24 Python
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
python制作抖音代码舞
2019/04/07 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
override和overload的区别
2016/03/09 面试题
暑假实习求职信范文
2013/09/22 职场文书
安全教育心得体会
2013/12/29 职场文书
大学运动会入场词
2014/02/22 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
解除施工合同协议书
2014/10/17 职场文书
限期整改通知书
2015/04/22 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
高三语文教学反思
2016/02/16 职场文书
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS