(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]);