jquery插件开发之实现md5插件
方法返回的是一串十进制数,在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;
推荐阅读
-
jquery插件开发之实现md5插件
-
jQuery使用unlock.js插件实现滑动解锁
-
VsCode插件开发之插件初步通信的方法步骤
-
jQuery插件实现的日历功能示例【附源码下载】
-
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
-
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
-
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
-
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
-
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
-
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】