找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2785|回复: 0

【JS】JavaScript版的MD5算法

[复制链接]
发表于 2014-11-6 16:37:51 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
抄来的。
  1. var CharBits=8;//每个字符的位数
  2. function StringMD5(SrcStr)
  3. {
  4.         return BinArr2Hex(BinMD5(Str2BinArray(SrcStr),SrcStr.length*CharBits));
  5. }
  6. function BinMD5(X,TotalBits)
  7. {
  8.         X[TotalBits>>5]|=0x80<<((TotalBits)%32);
  9.         X[(((TotalBits+64)>>>9)<<4)+14]=TotalBits;

  10.         var A=0x67452301;
  11.         var B=0xEFCDAB89;
  12.         var C=0x98BADCFE;
  13.         var D=0x10325476;

  14.         for(var i=0;i<X.length;i+=16)
  15.         {
  16.                 var OldA=A;
  17.                 var OldB=B;
  18.                 var OldC=C;
  19.                 var OldD=D;

  20.                 A=FF(A,B,C,D,X[i+0x0],0x07,0xD76AA478);
  21.                 D=FF(D,A,B,C,X[i+0x1],0x0C,0xE8C7B756);
  22.                 C=FF(C,D,A,B,X[i+0x2],0x11,0x242070DB);
  23.                 B=FF(B,C,D,A,X[i+0x3],0x16,0xC1BDCEEE);
  24.                 A=FF(A,B,C,D,X[i+0x4],0x07,0xF57C0FAF);
  25.                 D=FF(D,A,B,C,X[i+0x5],0x0C,0x4787C62A);
  26.                 C=FF(C,D,A,B,X[i+0x6],0x11,0xA8304613);
  27.                 B=FF(B,C,D,A,X[i+0x7],0x16,0xFD469501);
  28.                 A=FF(A,B,C,D,X[i+0x8],0x07,0x698098D8);
  29.                 D=FF(D,A,B,C,X[i+0x9],0x0C,0x8B44F7AF);
  30.                 C=FF(C,D,A,B,X[i+0xA],0x11,0xFFFF5BB1);
  31.                 B=FF(B,C,D,A,X[i+0xB],0x16,0x895CD7BE);
  32.                 A=FF(A,B,C,D,X[i+0xC],0x07,0x6B901122);
  33.                 D=FF(D,A,B,C,X[i+0xD],0x0C,0xFD987193);
  34.                 C=FF(C,D,A,B,X[i+0xE],0x11,0xA679438E);
  35.                 B=FF(B,C,D,A,X[i+0xF],0x16,0x49B40821);

  36.                 A=GG(A,B,C,D,X[i+0x1],0x05,0xF61E2562);
  37.                 D=GG(D,A,B,C,X[i+0x6],0x09,0xC040B340);
  38.                 C=GG(C,D,A,B,X[i+0xB],0x0E,0x265E5A51);
  39.                 B=GG(B,C,D,A,X[i+0x0],0x14,0xE9B6C7AA);
  40.                 A=GG(A,B,C,D,X[i+0x5],0x05,0xD62F105D);
  41.                 D=GG(D,A,B,C,X[i+0xA],0x09,0x02441453);
  42.                 C=GG(C,D,A,B,X[i+0xF],0x0E,0xD8A1E681);
  43.                 B=GG(B,C,D,A,X[i+0x4],0x14,0xE7D3FBC8);
  44.                 A=GG(A,B,C,D,X[i+0x9],0x05,0x21E1CDE6);
  45.                 D=GG(D,A,B,C,X[i+0xE],0x09,0xC33707D6);
  46.                 C=GG(C,D,A,B,X[i+0x3],0x0E,0xF4D50D87);
  47.                 B=GG(B,C,D,A,X[i+0x8],0x14,0x455A14ED);
  48.                 A=GG(A,B,C,D,X[i+0xD],0x05,0xA9E3E905);
  49.                 D=GG(D,A,B,C,X[i+0x2],0x09,0xFCEFA3F8);
  50.                 C=GG(C,D,A,B,X[i+0x7],0x0E,0x676F02D9);
  51.                 B=GG(B,C,D,A,X[i+0xC],0x14,0x8D2A4C8A);

  52.                 A=HH(A,B,C,D,X[i+0x5],0x04,0xFFFA3942);
  53.                 D=HH(D,A,B,C,X[i+0x8],0x0B,0x8771F681);
  54.                 C=HH(C,D,A,B,X[i+0xB],0x10,0x6D9D6122);
  55.                 B=HH(B,C,D,A,X[i+0xE],0x17,0xFDE5380C);
  56.                 A=HH(A,B,C,D,X[i+0x1],0x04,0xA4BEEA44);
  57.                 D=HH(D,A,B,C,X[i+0x4],0x0B,0x4BDECFA9);
  58.                 C=HH(C,D,A,B,X[i+0x7],0x10,0xF6BB4B60);
  59.                 B=HH(B,C,D,A,X[i+0xA],0x17,0xBEBFBC70);
  60.                 A=HH(A,B,C,D,X[i+0xD],0x04,0x289B7EC6);
  61.                 D=HH(D,A,B,C,X[i+0x0],0x0B,0xEAA127FA);
  62.                 C=HH(C,D,A,B,X[i+0x3],0x10,0xD4EF3085);
  63.                 B=HH(B,C,D,A,X[i+0x6],0x17,0x04881D05);
  64.                 A=HH(A,B,C,D,X[i+0x9],0x04,0xD9D4D039);
  65.                 D=HH(D,A,B,C,X[i+0xC],0x0B,0xE6DB99E5);
  66.                 C=HH(C,D,A,B,X[i+0xF],0x10,0x1FA27CF8);
  67.                 B=HH(B,C,D,A,X[i+0x2],0x17,0xC4AC5665);

  68.                 A=II(A,B,C,D,X[i+0x0],0x06,0xF4292244);
  69.                 D=II(D,A,B,C,X[i+0x7],0x0A,0x432AFF97);
  70.                 C=II(C,D,A,B,X[i+0xE],0x0F,0xAB9423A7);
  71.                 B=II(B,C,D,A,X[i+0x5],0x15,0xFC93A039);
  72.                 A=II(A,B,C,D,X[i+0xC],0x06,0x655B59C3);
  73.                 D=II(D,A,B,C,X[i+0x3],0x0A,0x8F0CCC92);
  74.                 C=II(C,D,A,B,X[i+0xA],0x0F,0xFFEFF47D);
  75.                 B=II(B,C,D,A,X[i+0x1],0x15,0x85845DD1);
  76.                 A=II(A,B,C,D,X[i+0x8],0x06,0x6FA87E4F);
  77.                 D=II(D,A,B,C,X[i+0xF],0x0A,0xFE2CE6E0);
  78.                 C=II(C,D,A,B,X[i+0x6],0x0F,0xA3014314);
  79.                 B=II(B,C,D,A,X[i+0xD],0x15,0x4E0811A1);
  80.                 A=II(A,B,C,D,X[i+0x4],0x06,0xF7537E82);
  81.                 D=II(D,A,B,C,X[i+0xB],0x0A,0xBD3AF235);
  82.                 C=II(C,D,A,B,X[i+0x2],0x0F,0x2AD7D2BB);
  83.                 B=II(B,C,D,A,X[i+0x9],0x15,0xEB86D391);

  84.                 A=AddUnsigned(A,OldA);
  85.                 B=AddUnsigned(B,OldB);
  86.                 C=AddUnsigned(C,OldC);
  87.                 D=AddUnsigned(D,OldD);
  88.         }
  89.         return Array(A,B,C,D);
  90. }
  91. function CMN(Q,A,B,X,S,T)
  92. {
  93.         return AddUnsigned(BitRol(AddUnsigned(AddUnsigned(A,Q),AddUnsigned(X,T)),S),B);
  94. }
  95. function FF(A,B,C,D,X,S,T)
  96. {
  97.         return CMN((B & C)|((~B)& D),A,B,X,S,T);
  98. }
  99. function GG(A,B,C,D,X,S,T)
  100. {
  101.         return CMN((B & D)|(C &(~D)),A,B,X,S,T);
  102. }
  103. function HH(A,B,C,D,X,S,T)
  104. {
  105.         return CMN(B^C^D,A,B,X,S,T);
  106. }
  107. function II(A,B,C,D,X,S,T)
  108. {
  109.         return CMN(C^(B|(~D)),A,B,X,S,T);
  110. }
  111. function AddUnsigned(X,y)
  112. {
  113.         var lsw=(X&0xFFFF)+(y&0xFFFF);
  114.         var msw=(X>>16)+(y>>16)+(lsw>>16);
  115.         return(msw<<16)|(lsw&0xFFFF);
  116. }
  117. function BitRol(Val,Count)
  118. {
  119.         return(Val<<Count)|(Val>>>(32-Count));
  120. }
  121. function Str2BinArray(StrToConv)
  122. {
  123.         var Bin=Array();
  124.         var Mask=(1<<CharBits)-1;
  125.         for(var i=0;i<StrToConv.length*CharBits;i+=CharBits)
  126.                 Bin[i>>5]|=(StrToConv.charCodeAt(i/CharBits)&Mask)<<(i%32);
  127.         return Bin;
  128. }
  129. function BinArr2Hex(BinArr)
  130. {
  131.         var HexTab="0123456789abcdef";//"0123456789ABCDEF"
  132.         var StrRet="";
  133.         for(var i=0;i<BinArr.length*4;i++)
  134.                 StrRet+=HexTab.charAt((BinArr[i>>2]>>((i%4)*8+4))&0xF)+HexTab.charAt((BinArr[i>>2]>>((i%4)*8))&0xF);
  135.         return StrRet;
  136. }
复制代码
用法:调用StringMD5取得一个字符串的MD5值。
回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-23 19:48 , Processed in 0.040803 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表