?
<
HTML
>
< HEAD >
< META?http - equiv = ' Content-Type ' ?content = ' text/html;?charset=gb2312 ' >
< TITLE > 非常流行的JS的md5加密辦法 </ TITLE >
</ HEAD >
< BODY? >
< input?id = test?value = webasp >
< input?type = button?value = md5?onclick = " alert(hex_md5(test.value)) " >
< script >
var?hexcase? = ? 0 ;?? /* ?hex?output?format.?0?-?lowercase;?1?-?uppercase???????? */
var?b64pad?? = ? "" ;? /* ?base-64?pad?character.?"="?for?strict?RFC?compliance??? */
var?chrsz??? = ? 8 ;?? /* ?bits?per?input?character.?8?-?ASCII;?16?-?Unicode?????? */
/*
?*?These?are?the?functions?you'll?usually?want?to?call
?*?They?take?string?arguments?and?return?either?hex?or?base-64?encoded?strings
? */
function?hex_md5(s){? return ?binl2hex(core_md5(str2binl(s),?s.length? * ?chrsz));}
function?b64_md5(s){? return ?binl2b64(core_md5(str2binl(s),?s.length? * ?chrsz));}
function?hex_hmac_md5(key,?data)?{? return ?binl2hex(core_hmac_md5(key,?data));?}
function?b64_hmac_md5(key,?data)?{? return ?binl2b64(core_hmac_md5(key,?data));?}
/* ?Backwards?compatibility?-?same?as?hex_md5()? */
function?calcMD5(s){? return ?binl2hex(core_md5(str2binl(s),?s.length? * ?chrsz));}
/* ?
?*?Perform?a?simple?self-test?to?see?if?the?VM?is?working?
? */
function?md5_vm_test()
{
?? return ?hex_md5( " abc " )? == ? " 900150983cd24fb0d6963f7d28e17f72 " ;
}
/*
?*?Calculate?the?MD5?of?an?array?of?little-endian?words,?and?a?bit?length
? */
function?core_md5(x,?len)
{
?? /* ?append?padding? */
??x[len? >> ? 5 ]? |= ? 0x80 ? << ?((len)? % ? 32 );
??x[(((len? + ? 64 )? >>> ? 9 )? << ? 4 )? + ? 14 ]? = ?len;
??
??var?a? = ?? 1732584193 ;
??var?b? = ? - 271733879 ;
??var?c? = ? - 1732584194 ;
??var?d? = ?? 271733878 ;
?? for (var?i? = ? 0 ;?i? < ?x.length;?i? += ? 16 )
??{
????var?olda? = ?a;
????var?oldb? = ?b;
????var?oldc? = ?c;
????var?oldd? = ?d;
?
????a? = ?md5_ff(a,?b,?c,?d,?x[i + ? 0 ],? 7 ?,? - 680876936 );
????d? = ?md5_ff(d,?a,?b,?c,?x[i + ? 1 ],? 12 ,? - 389564586 );
????c? = ?md5_ff(c,?d,?a,?b,?x[i + ? 2 ],? 17 ,?? 606105819 );
????b? = ?md5_ff(b,?c,?d,?a,?x[i + ? 3 ],? 22 ,? - 1044525330 );
????a? = ?md5_ff(a,?b,?c,?d,?x[i + ? 4 ],? 7 ?,? - 176418897 );
????d? = ?md5_ff(d,?a,?b,?c,?x[i + ? 5 ],? 12 ,?? 1200080426 );
????c? = ?md5_ff(c,?d,?a,?b,?x[i + ? 6 ],? 17 ,? - 1473231341 );
????b? = ?md5_ff(b,?c,?d,?a,?x[i + ? 7 ],? 22 ,? - 45705983 );
????a? = ?md5_ff(a,?b,?c,?d,?x[i + ? 8 ],? 7 ?,?? 1770035416 );
????d? = ?md5_ff(d,?a,?b,?c,?x[i + ? 9 ],? 12 ,? - 1958414417 );
????c? = ?md5_ff(c,?d,?a,?b,?x[i + 10 ],? 17 ,? - 42063 );
????b? = ?md5_ff(b,?c,?d,?a,?x[i + 11 ],? 22 ,? - 1990404162 );
????a? = ?md5_ff(a,?b,?c,?d,?x[i + 12 ],? 7 ?,?? 1804603682 );
????d? = ?md5_ff(d,?a,?b,?c,?x[i + 13 ],? 12 ,? - 40341101 );
????c? = ?md5_ff(c,?d,?a,?b,?x[i + 14 ],? 17 ,? - 1502002290 );
????b? = ?md5_ff(b,?c,?d,?a,?x[i + 15 ],? 22 ,?? 1236535329 );
????a? = ?md5_gg(a,?b,?c,?d,?x[i + ? 1 ],? 5 ?,? - 165796510 );
????d? = ?md5_gg(d,?a,?b,?c,?x[i + ? 6 ],? 9 ?,? - 1069501632 );
????c? = ?md5_gg(c,?d,?a,?b,?x[i + 11 ],? 14 ,?? 643717713 );
????b? = ?md5_gg(b,?c,?d,?a,?x[i + ? 0 ],? 20 ,? - 373897302 );
????a? = ?md5_gg(a,?b,?c,?d,?x[i + ? 5 ],? 5 ?,? - 701558691 );
????d? = ?md5_gg(d,?a,?b,?c,?x[i + 10 ],? 9 ?,?? 38016083 );
????c? = ?md5_gg(c,?d,?a,?b,?x[i + 15 ],? 14 ,? - 660478335 );
????b? = ?md5_gg(b,?c,?d,?a,?x[i + ? 4 ],? 20 ,? - 405537848 );
????a? = ?md5_gg(a,?b,?c,?d,?x[i + ? 9 ],? 5 ?,?? 568446438 );
????d? = ?md5_gg(d,?a,?b,?c,?x[i + 14 ],? 9 ?,? - 1019803690 );
????c? = ?md5_gg(c,?d,?a,?b,?x[i + ? 3 ],? 14 ,? - 187363961 );
????b? = ?md5_gg(b,?c,?d,?a,?x[i + ? 8 ],? 20 ,?? 1163531501 );
????a? = ?md5_gg(a,?b,?c,?d,?x[i + 13 ],? 5 ?,? - 1444681467 );
????d? = ?md5_gg(d,?a,?b,?c,?x[i + ? 2 ],? 9 ?,? - 51403784 );
????c? = ?md5_gg(c,?d,?a,?b,?x[i + ? 7 ],? 14 ,?? 1735328473 );
????b? = ?md5_gg(b,?c,?d,?a,?x[i + 12 ],? 20 ,? - 1926607734 );
????a? = ?md5_hh(a,?b,?c,?d,?x[i + ? 5 ],? 4 ?,? - 378558 );
????d? = ?md5_hh(d,?a,?b,?c,?x[i + ? 8 ],? 11 ,? - 2022574463 );
????c? = ?md5_hh(c,?d,?a,?b,?x[i + 11 ],? 16 ,?? 1839030562 );
????b? = ?md5_hh(b,?c,?d,?a,?x[i + 14 ],? 23 ,? - 35309556 );
????a? = ?md5_hh(a,?b,?c,?d,?x[i + ? 1 ],? 4 ?,? - 1530992060 );
????d? = ?md5_hh(d,?a,?b,?c,?x[i + ? 4 ],? 11 ,?? 1272893353 );
????c? = ?md5_hh(c,?d,?a,?b,?x[i + ? 7 ],? 16 ,? - 155497632 );
????b? = ?md5_hh(b,?c,?d,?a,?x[i + 10 ],? 23 ,? - 1094730640 );
????a? = ?md5_hh(a,?b,?c,?d,?x[i + 13 ],? 4 ?,?? 681279174 );
????d? = ?md5_hh(d,?a,?b,?c,?x[i + ? 0 ],? 11 ,? - 358537222 );
????c? = ?md5_hh(c,?d,?a,?b,?x[i + ? 3 ],? 16 ,? - 722521979 );
????b? = ?md5_hh(b,?c,?d,?a,?x[i + ? 6 ],? 23 ,?? 76029189 );
????a? = ?md5_hh(a,?b,?c,?d,?x[i + ? 9 ],? 4 ?,? - 640364487 );
????d? = ?md5_hh(d,?a,?b,?c,?x[i + 12 ],? 11 ,? - 421815835 );
????c? = ?md5_hh(c,?d,?a,?b,?x[i + 15 ],? 16 ,?? 530742520 );
????b? = ?md5_hh(b,?c,?d,?a,?x[i + ? 2 ],? 23 ,? - 995338651 );
????a? = ?md5_ii(a,?b,?c,?d,?x[i + ? 0 ],? 6 ?,? - 198630844 );
????d? = ?md5_ii(d,?a,?b,?c,?x[i + ? 7 ],? 10 ,?? 1126891415 );
????c? = ?md5_ii(c,?d,?a,?b,?x[i + 14 ],? 15 ,? - 1416354905 );
????b? = ?md5_ii(b,?c,?d,?a,?x[i + ? 5 ],? 21 ,? - 57434055 );
????a? = ?md5_ii(a,?b,?c,?d,?x[i + 12 ],? 6 ?,?? 1700485571 );
????d? = ?md5_ii(d,?a,?b,?c,?x[i + ? 3 ],? 10 ,? - 1894986606 );
????c? = ?md5_ii(c,?d,?a,?b,?x[i + 10 ],? 15 ,? - 1051523 );
????b? = ?md5_ii(b,?c,?d,?a,?x[i + ? 1 ],? 21 ,? - 2054922799 );
????a? = ?md5_ii(a,?b,?c,?d,?x[i + ? 8 ],? 6 ?,?? 1873313359 );
????d? = ?md5_ii(d,?a,?b,?c,?x[i + 15 ],? 10 ,? - 30611744 );
????c? = ?md5_ii(c,?d,?a,?b,?x[i + ? 6 ],? 15 ,? - 1560198380 );
????b? = ?md5_ii(b,?c,?d,?a,?x[i + 13 ],? 21 ,?? 1309151649 );
????a? = ?md5_ii(a,?b,?c,?d,?x[i + ? 4 ],? 6 ?,? - 145523070 );
????d? = ?md5_ii(d,?a,?b,?c,?x[i + 11 ],? 10 ,? - 1120210379 );
????c? = ?md5_ii(c,?d,?a,?b,?x[i + ? 2 ],? 15 ,?? 718787259 );
????b? = ?md5_ii(b,?c,?d,?a,?x[i + ? 9 ],? 21 ,? - 343485551 );
????a? = ?safe_add(a,?olda);
????b? = ?safe_add(b,?oldb);
????c? = ?safe_add(c,?oldc);
????d? = ?safe_add(d,?oldd);
??}
?? return ?Array(a,?b,?c,?d);
??
}
/*
?*?These?functions?implement?the?four?basic?operations?the?algorithm?uses.
? */
function?md5_cmn(q,?a,?b,?x,?s,?t)
{
?? return ?safe_add(bit_rol(safe_add(safe_add(a,?q),?safe_add(x,?t)),?s),b);
}
function?md5_ff(a,?b,?c,?d,?x,?s,?t)
{
?? return ?md5_cmn((b? & ?c)? | ?(( ~ b)? & ?d),?a,?b,?x,?s,?t);
}
function?md5_gg(a,?b,?c,?d,?x,?s,?t)
{
?? return ?md5_cmn((b? & ?d)? | ?(c? & ?( ~ d)),?a,?b,?x,?s,?t);
}
function?md5_hh(a,?b,?c,?d,?x,?s,?t)
{
?? return ?md5_cmn(b? ^ ?c? ^ ?d,?a,?b,?x,?s,?t);
}
function?md5_ii(a,?b,?c,?d,?x,?s,?t)
{
?? return ?md5_cmn(c? ^ ?(b? | ?( ~ d)),?a,?b,?x,?s,?t);
}
/*
?*?Calculate?the?HMAC-MD5,?of?a?key?and?some?data
? */
function?core_hmac_md5(key,?data)
{
??var?bkey? = ?str2binl(key);
?? if (bkey.length? > ? 16 )?bkey? = ?core_md5(bkey,?key.length? * ?chrsz);
??var?ipad? = ?Array( 16 ),?opad? = ?Array( 16 );
?? for (var?i? = ? 0 ;?i? < ? 16 ;?i ++ )?
??{
????ipad[i]? = ?bkey[i]? ^ ? 0x36363636 ;
????opad[i]? = ?bkey[i]? ^ ? 0x5C5C5C5C ;
??}
??var?hash? = ?core_md5(ipad.concat(str2binl(data)),? 512 ? + ?data.length? * ?chrsz);
?? return ?core_md5(opad.concat(hash),? 512 ? + ? 128 );
}
/*
?*?Add?integers,?wrapping?at?2^32.?This?uses?16-bit?operations?internally
?*?to?work?around?bugs?in?some?JS?interpreters.
? */
function?safe_add(x,?y)
{
??var?lsw? = ?(x? & ? 0xFFFF )? + ?(y? & ? 0xFFFF );
??var?msw? = ?(x? >> ? 16 )? + ?(y? >> ? 16 )? + ?(lsw? >> ? 16 );
?? return ?(msw? << ? 16 )? | ?(lsw? & ? 0xFFFF );
}
/*
?*?Bitwise?rotate?a?32-bit?number?to?the?left.
? */
function?bit_rol(num,?cnt)
{
?? return ?(num? << ?cnt)? | ?(num? >>> ?( 32 ? - ?cnt));
}
/*
?*?Convert?a?string?to?an?array?of?little-endian?words
?*?If?chrsz?is?ASCII,?characters?>255?have?their?hi-byte?silently?ignored.
? */
function?str2binl(str)
{
??var?bin? = ?Array();
??var?mask? = ?( 1 ? << ?chrsz)? - ? 1 ;
?? for (var?i? = ? 0 ;?i? < ?str.length? * ?chrsz;?i? += ?chrsz)
????bin[i >> 5 ]? |= ?(str.charCodeAt(i? / ?chrsz)? & ?mask)? << ?(i % 32 );
?? return ?bin;
}
/*
?*?Convert?an?array?of?little-endian?words?to?a?hex?string.
? */
function?binl2hex(binarray)
{
??var?hex_tab? = ?hexcase? ? ? " 0123456789ABCDEF " ?:? " 0123456789abcdef " ;
??var?str? = ? "" ;
?? for (var?i? = ? 0 ;?i? < ?binarray.length? * ? 4 ;?i ++ )
??{
????str? += ?hex_tab.charAt((binarray[i >> 2 ]? >> ?((i % 4 ) * 8 + 4 ))? & ? 0xF )? +
???????????hex_tab.charAt((binarray[i >> 2 ]? >> ?((i % 4 ) * 8 ??))? & ? 0xF );
??}
?? return ?str;
}
/*
?*?Convert?an?array?of?little-endian?words?to?a?base-64?string
? */
function?binl2b64(binarray)
{
??var?tab? = ? " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ " ;
??var?str? = ? "" ;
?? for (var?i? = ? 0 ;?i? < ?binarray.length? * ? 4 ;?i? += ? 3 )
??{
????var?triplet? = ?(((binarray[i??? >> ? 2 ]? >> ? 8 ? * ?(?i??? % 4 ))? & ? 0xFF )? << ? 16 )
???????????????? | ?(((binarray[i + 1 ? >> ? 2 ]? >> ? 8 ? * ?((i + 1 ) % 4 ))? & ? 0xFF )? << ? 8 ?)
???????????????? | ??((binarray[i + 2 ? >> ? 2 ]? >> ? 8 ? * ?((i + 2 ) % 4 ))? & ? 0xFF );
???? for (var?j? = ? 0 ;?j? < ? 4 ;?j ++ )
????{
?????? if (i? * ? 8 ? + ?j? * ? 6 ? > ?binarray.length? * ? 32 )?str? += ?b64pad;
?????? else ?str? += ?tab.charAt((triplet? >> ? 6 * ( 3 - j))? & ? 0x3F );
????}
??}
?? return ?str;
}
</ script > ?
</ BODY ></ HTML >
< HEAD >
< META?http - equiv = ' Content-Type ' ?content = ' text/html;?charset=gb2312 ' >
< TITLE > 非常流行的JS的md5加密辦法 </ TITLE >
</ HEAD >
< BODY? >
< input?id = test?value = webasp >
< input?type = button?value = md5?onclick = " alert(hex_md5(test.value)) " >
< script >
var?hexcase? = ? 0 ;?? /* ?hex?output?format.?0?-?lowercase;?1?-?uppercase???????? */
var?b64pad?? = ? "" ;? /* ?base-64?pad?character.?"="?for?strict?RFC?compliance??? */
var?chrsz??? = ? 8 ;?? /* ?bits?per?input?character.?8?-?ASCII;?16?-?Unicode?????? */
/*
?*?These?are?the?functions?you'll?usually?want?to?call
?*?They?take?string?arguments?and?return?either?hex?or?base-64?encoded?strings
? */
function?hex_md5(s){? return ?binl2hex(core_md5(str2binl(s),?s.length? * ?chrsz));}
function?b64_md5(s){? return ?binl2b64(core_md5(str2binl(s),?s.length? * ?chrsz));}
function?hex_hmac_md5(key,?data)?{? return ?binl2hex(core_hmac_md5(key,?data));?}
function?b64_hmac_md5(key,?data)?{? return ?binl2b64(core_hmac_md5(key,?data));?}
/* ?Backwards?compatibility?-?same?as?hex_md5()? */
function?calcMD5(s){? return ?binl2hex(core_md5(str2binl(s),?s.length? * ?chrsz));}
/* ?
?*?Perform?a?simple?self-test?to?see?if?the?VM?is?working?
? */
function?md5_vm_test()
{
?? return ?hex_md5( " abc " )? == ? " 900150983cd24fb0d6963f7d28e17f72 " ;
}
/*
?*?Calculate?the?MD5?of?an?array?of?little-endian?words,?and?a?bit?length
? */
function?core_md5(x,?len)
{
?? /* ?append?padding? */
??x[len? >> ? 5 ]? |= ? 0x80 ? << ?((len)? % ? 32 );
??x[(((len? + ? 64 )? >>> ? 9 )? << ? 4 )? + ? 14 ]? = ?len;
??
??var?a? = ?? 1732584193 ;
??var?b? = ? - 271733879 ;
??var?c? = ? - 1732584194 ;
??var?d? = ?? 271733878 ;
?? for (var?i? = ? 0 ;?i? < ?x.length;?i? += ? 16 )
??{
????var?olda? = ?a;
????var?oldb? = ?b;
????var?oldc? = ?c;
????var?oldd? = ?d;
?
????a? = ?md5_ff(a,?b,?c,?d,?x[i + ? 0 ],? 7 ?,? - 680876936 );
????d? = ?md5_ff(d,?a,?b,?c,?x[i + ? 1 ],? 12 ,? - 389564586 );
????c? = ?md5_ff(c,?d,?a,?b,?x[i + ? 2 ],? 17 ,?? 606105819 );
????b? = ?md5_ff(b,?c,?d,?a,?x[i + ? 3 ],? 22 ,? - 1044525330 );
????a? = ?md5_ff(a,?b,?c,?d,?x[i + ? 4 ],? 7 ?,? - 176418897 );
????d? = ?md5_ff(d,?a,?b,?c,?x[i + ? 5 ],? 12 ,?? 1200080426 );
????c? = ?md5_ff(c,?d,?a,?b,?x[i + ? 6 ],? 17 ,? - 1473231341 );
????b? = ?md5_ff(b,?c,?d,?a,?x[i + ? 7 ],? 22 ,? - 45705983 );
????a? = ?md5_ff(a,?b,?c,?d,?x[i + ? 8 ],? 7 ?,?? 1770035416 );
????d? = ?md5_ff(d,?a,?b,?c,?x[i + ? 9 ],? 12 ,? - 1958414417 );
????c? = ?md5_ff(c,?d,?a,?b,?x[i + 10 ],? 17 ,? - 42063 );
????b? = ?md5_ff(b,?c,?d,?a,?x[i + 11 ],? 22 ,? - 1990404162 );
????a? = ?md5_ff(a,?b,?c,?d,?x[i + 12 ],? 7 ?,?? 1804603682 );
????d? = ?md5_ff(d,?a,?b,?c,?x[i + 13 ],? 12 ,? - 40341101 );
????c? = ?md5_ff(c,?d,?a,?b,?x[i + 14 ],? 17 ,? - 1502002290 );
????b? = ?md5_ff(b,?c,?d,?a,?x[i + 15 ],? 22 ,?? 1236535329 );
????a? = ?md5_gg(a,?b,?c,?d,?x[i + ? 1 ],? 5 ?,? - 165796510 );
????d? = ?md5_gg(d,?a,?b,?c,?x[i + ? 6 ],? 9 ?,? - 1069501632 );
????c? = ?md5_gg(c,?d,?a,?b,?x[i + 11 ],? 14 ,?? 643717713 );
????b? = ?md5_gg(b,?c,?d,?a,?x[i + ? 0 ],? 20 ,? - 373897302 );
????a? = ?md5_gg(a,?b,?c,?d,?x[i + ? 5 ],? 5 ?,? - 701558691 );
????d? = ?md5_gg(d,?a,?b,?c,?x[i + 10 ],? 9 ?,?? 38016083 );
????c? = ?md5_gg(c,?d,?a,?b,?x[i + 15 ],? 14 ,? - 660478335 );
????b? = ?md5_gg(b,?c,?d,?a,?x[i + ? 4 ],? 20 ,? - 405537848 );
????a? = ?md5_gg(a,?b,?c,?d,?x[i + ? 9 ],? 5 ?,?? 568446438 );
????d? = ?md5_gg(d,?a,?b,?c,?x[i + 14 ],? 9 ?,? - 1019803690 );
????c? = ?md5_gg(c,?d,?a,?b,?x[i + ? 3 ],? 14 ,? - 187363961 );
????b? = ?md5_gg(b,?c,?d,?a,?x[i + ? 8 ],? 20 ,?? 1163531501 );
????a? = ?md5_gg(a,?b,?c,?d,?x[i + 13 ],? 5 ?,? - 1444681467 );
????d? = ?md5_gg(d,?a,?b,?c,?x[i + ? 2 ],? 9 ?,? - 51403784 );
????c? = ?md5_gg(c,?d,?a,?b,?x[i + ? 7 ],? 14 ,?? 1735328473 );
????b? = ?md5_gg(b,?c,?d,?a,?x[i + 12 ],? 20 ,? - 1926607734 );
????a? = ?md5_hh(a,?b,?c,?d,?x[i + ? 5 ],? 4 ?,? - 378558 );
????d? = ?md5_hh(d,?a,?b,?c,?x[i + ? 8 ],? 11 ,? - 2022574463 );
????c? = ?md5_hh(c,?d,?a,?b,?x[i + 11 ],? 16 ,?? 1839030562 );
????b? = ?md5_hh(b,?c,?d,?a,?x[i + 14 ],? 23 ,? - 35309556 );
????a? = ?md5_hh(a,?b,?c,?d,?x[i + ? 1 ],? 4 ?,? - 1530992060 );
????d? = ?md5_hh(d,?a,?b,?c,?x[i + ? 4 ],? 11 ,?? 1272893353 );
????c? = ?md5_hh(c,?d,?a,?b,?x[i + ? 7 ],? 16 ,? - 155497632 );
????b? = ?md5_hh(b,?c,?d,?a,?x[i + 10 ],? 23 ,? - 1094730640 );
????a? = ?md5_hh(a,?b,?c,?d,?x[i + 13 ],? 4 ?,?? 681279174 );
????d? = ?md5_hh(d,?a,?b,?c,?x[i + ? 0 ],? 11 ,? - 358537222 );
????c? = ?md5_hh(c,?d,?a,?b,?x[i + ? 3 ],? 16 ,? - 722521979 );
????b? = ?md5_hh(b,?c,?d,?a,?x[i + ? 6 ],? 23 ,?? 76029189 );
????a? = ?md5_hh(a,?b,?c,?d,?x[i + ? 9 ],? 4 ?,? - 640364487 );
????d? = ?md5_hh(d,?a,?b,?c,?x[i + 12 ],? 11 ,? - 421815835 );
????c? = ?md5_hh(c,?d,?a,?b,?x[i + 15 ],? 16 ,?? 530742520 );
????b? = ?md5_hh(b,?c,?d,?a,?x[i + ? 2 ],? 23 ,? - 995338651 );
????a? = ?md5_ii(a,?b,?c,?d,?x[i + ? 0 ],? 6 ?,? - 198630844 );
????d? = ?md5_ii(d,?a,?b,?c,?x[i + ? 7 ],? 10 ,?? 1126891415 );
????c? = ?md5_ii(c,?d,?a,?b,?x[i + 14 ],? 15 ,? - 1416354905 );
????b? = ?md5_ii(b,?c,?d,?a,?x[i + ? 5 ],? 21 ,? - 57434055 );
????a? = ?md5_ii(a,?b,?c,?d,?x[i + 12 ],? 6 ?,?? 1700485571 );
????d? = ?md5_ii(d,?a,?b,?c,?x[i + ? 3 ],? 10 ,? - 1894986606 );
????c? = ?md5_ii(c,?d,?a,?b,?x[i + 10 ],? 15 ,? - 1051523 );
????b? = ?md5_ii(b,?c,?d,?a,?x[i + ? 1 ],? 21 ,? - 2054922799 );
????a? = ?md5_ii(a,?b,?c,?d,?x[i + ? 8 ],? 6 ?,?? 1873313359 );
????d? = ?md5_ii(d,?a,?b,?c,?x[i + 15 ],? 10 ,? - 30611744 );
????c? = ?md5_ii(c,?d,?a,?b,?x[i + ? 6 ],? 15 ,? - 1560198380 );
????b? = ?md5_ii(b,?c,?d,?a,?x[i + 13 ],? 21 ,?? 1309151649 );
????a? = ?md5_ii(a,?b,?c,?d,?x[i + ? 4 ],? 6 ?,? - 145523070 );
????d? = ?md5_ii(d,?a,?b,?c,?x[i + 11 ],? 10 ,? - 1120210379 );
????c? = ?md5_ii(c,?d,?a,?b,?x[i + ? 2 ],? 15 ,?? 718787259 );
????b? = ?md5_ii(b,?c,?d,?a,?x[i + ? 9 ],? 21 ,? - 343485551 );
????a? = ?safe_add(a,?olda);
????b? = ?safe_add(b,?oldb);
????c? = ?safe_add(c,?oldc);
????d? = ?safe_add(d,?oldd);
??}
?? return ?Array(a,?b,?c,?d);
??
}
/*
?*?These?functions?implement?the?four?basic?operations?the?algorithm?uses.
? */
function?md5_cmn(q,?a,?b,?x,?s,?t)
{
?? return ?safe_add(bit_rol(safe_add(safe_add(a,?q),?safe_add(x,?t)),?s),b);
}
function?md5_ff(a,?b,?c,?d,?x,?s,?t)
{
?? return ?md5_cmn((b? & ?c)? | ?(( ~ b)? & ?d),?a,?b,?x,?s,?t);
}
function?md5_gg(a,?b,?c,?d,?x,?s,?t)
{
?? return ?md5_cmn((b? & ?d)? | ?(c? & ?( ~ d)),?a,?b,?x,?s,?t);
}
function?md5_hh(a,?b,?c,?d,?x,?s,?t)
{
?? return ?md5_cmn(b? ^ ?c? ^ ?d,?a,?b,?x,?s,?t);
}
function?md5_ii(a,?b,?c,?d,?x,?s,?t)
{
?? return ?md5_cmn(c? ^ ?(b? | ?( ~ d)),?a,?b,?x,?s,?t);
}
/*
?*?Calculate?the?HMAC-MD5,?of?a?key?and?some?data
? */
function?core_hmac_md5(key,?data)
{
??var?bkey? = ?str2binl(key);
?? if (bkey.length? > ? 16 )?bkey? = ?core_md5(bkey,?key.length? * ?chrsz);
??var?ipad? = ?Array( 16 ),?opad? = ?Array( 16 );
?? for (var?i? = ? 0 ;?i? < ? 16 ;?i ++ )?
??{
????ipad[i]? = ?bkey[i]? ^ ? 0x36363636 ;
????opad[i]? = ?bkey[i]? ^ ? 0x5C5C5C5C ;
??}
??var?hash? = ?core_md5(ipad.concat(str2binl(data)),? 512 ? + ?data.length? * ?chrsz);
?? return ?core_md5(opad.concat(hash),? 512 ? + ? 128 );
}
/*
?*?Add?integers,?wrapping?at?2^32.?This?uses?16-bit?operations?internally
?*?to?work?around?bugs?in?some?JS?interpreters.
? */
function?safe_add(x,?y)
{
??var?lsw? = ?(x? & ? 0xFFFF )? + ?(y? & ? 0xFFFF );
??var?msw? = ?(x? >> ? 16 )? + ?(y? >> ? 16 )? + ?(lsw? >> ? 16 );
?? return ?(msw? << ? 16 )? | ?(lsw? & ? 0xFFFF );
}
/*
?*?Bitwise?rotate?a?32-bit?number?to?the?left.
? */
function?bit_rol(num,?cnt)
{
?? return ?(num? << ?cnt)? | ?(num? >>> ?( 32 ? - ?cnt));
}
/*
?*?Convert?a?string?to?an?array?of?little-endian?words
?*?If?chrsz?is?ASCII,?characters?>255?have?their?hi-byte?silently?ignored.
? */
function?str2binl(str)
{
??var?bin? = ?Array();
??var?mask? = ?( 1 ? << ?chrsz)? - ? 1 ;
?? for (var?i? = ? 0 ;?i? < ?str.length? * ?chrsz;?i? += ?chrsz)
????bin[i >> 5 ]? |= ?(str.charCodeAt(i? / ?chrsz)? & ?mask)? << ?(i % 32 );
?? return ?bin;
}
/*
?*?Convert?an?array?of?little-endian?words?to?a?hex?string.
? */
function?binl2hex(binarray)
{
??var?hex_tab? = ?hexcase? ? ? " 0123456789ABCDEF " ?:? " 0123456789abcdef " ;
??var?str? = ? "" ;
?? for (var?i? = ? 0 ;?i? < ?binarray.length? * ? 4 ;?i ++ )
??{
????str? += ?hex_tab.charAt((binarray[i >> 2 ]? >> ?((i % 4 ) * 8 + 4 ))? & ? 0xF )? +
???????????hex_tab.charAt((binarray[i >> 2 ]? >> ?((i % 4 ) * 8 ??))? & ? 0xF );
??}
?? return ?str;
}
/*
?*?Convert?an?array?of?little-endian?words?to?a?base-64?string
? */
function?binl2b64(binarray)
{
??var?tab? = ? " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ " ;
??var?str? = ? "" ;
?? for (var?i? = ? 0 ;?i? < ?binarray.length? * ? 4 ;?i? += ? 3 )
??{
????var?triplet? = ?(((binarray[i??? >> ? 2 ]? >> ? 8 ? * ?(?i??? % 4 ))? & ? 0xFF )? << ? 16 )
???????????????? | ?(((binarray[i + 1 ? >> ? 2 ]? >> ? 8 ? * ?((i + 1 ) % 4 ))? & ? 0xFF )? << ? 8 ?)
???????????????? | ??((binarray[i + 2 ? >> ? 2 ]? >> ? 8 ? * ?((i + 2 ) % 4 ))? & ? 0xFF );
???? for (var?j? = ? 0 ;?j? < ? 4 ;?j ++ )
????{
?????? if (i? * ? 8 ? + ?j? * ? 6 ? > ?binarray.length? * ? 32 )?str? += ?b64pad;
?????? else ?str? += ?tab.charAt((triplet? >> ? 6 * ( 3 - j))? & ? 0x3F );
????}
??}
?? return ?str;
}
</ script > ?
</ BODY ></ HTML >