posts - 22,comments - 35,trackbacks - 0

          ?

          < 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 >
          posted on 2006-12-25 17:11 kelven 閱讀(614) 評(píng)論(0)  編輯  收藏 所屬分類: JavaScript
          主站蜘蛛池模板: 闸北区| 教育| 军事| 二连浩特市| 睢宁县| 罗甸县| 襄垣县| 黄浦区| 蒙山县| 吉首市| 涪陵区| 拜泉县| 万荣县| 思茅市| 齐河县| 海淀区| 贺兰县| 安丘市| 锡林郭勒盟| 阿合奇县| 龙南县| 紫云| 桓台县| 牟定县| 迁西县| 武城县| 玉林市| 鲜城| 汤原县| 丰都县| 若尔盖县| 军事| 庄浪县| 综艺| 谢通门县| 陇南市| 武汉市| 台州市| 五大连池市| 商城县| 铜山县|