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 选中文字并响应获取的实现代码
Aug 28 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
Dec 26 Javascript
jquery css 设置table的奇偶行背景色示例
Jun 03 Javascript
js判断变量初始化的三种形式及推荐用的形式
Jul 22 Javascript
原生javascript实现DIV拖拽并计算重复面积
Jan 02 Javascript
AngularJs Forms详解及简单示例
Sep 01 Javascript
node.js学习之事件模块Events的使用示例
Sep 28 Javascript
微信小程序实现人脸检测功能
May 25 Javascript
React 组件间的通信示例
Jun 14 Javascript
layui的table单击行勾选checkbox功能方法
Aug 14 Javascript
Node如何后台数据库使用增删改查功能
Nov 21 Javascript
微信小程序实现自定义底部导航
Nov 18 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
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
php实现的用户查询类实例
2015/06/18 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
php反射学习之依赖注入示例
2019/06/14 PHP
深入认识JavaScript中的函数
2007/01/22 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
2016/12/25 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
python文件与目录操作实例详解
2016/02/22 Python
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
python实现俄罗斯方块小游戏
2020/04/24 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
工作自我评价分享
2013/12/01 职场文书
打造完美自荐信
2014/01/24 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
2014年度考核工作总结
2014/12/24 职场文书
英文道歉信
2015/01/20 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技