直接コードに、遭遇したプロジェクト、MD5暗号化を実行します。
/ * * RSA Data Security社のMD5メッセージのJavaScript実装 *ダイジェストアルゴリズム、RFCで定義されている1321 *バージョン1.1著作権(C)ポール・ジョンストン1999 - 2002 *コードは、グレッグ・ホルトによって寄与 * HTTPを参照してください。詳細については//pajhome.org.uk/site/legal.html。 * / / * * 2 ^ 32で包み、整数を追加します。これは、内部で16ビット演算を使用して 、いくつかのJS通訳のバグを回避するには、*。 * / 関数safe_add(X、Y){ VARの LSW =(X&が0xFFFF)+(Y&0xFFFFの) VAR MSW =(X >> 16)+(Y >> 16)+(LSW >> 16 ) リターン(MSW << 16)| (LSW&0xFFFFの) } / * *ビット単位の左に32ビットの数値を回転させます。 * / ファンクションROL(NUM、CNT){ リターン(NUM << CNT)| (NUM >>>(32 - CNT)) } / * *これらの機能は、アルゴリズムが使用する四つの基本的な操作を実現します。 * / 関数CMN(Q、A、B、X、S、T){ 戻りsafe_add(ROL(safe_add(safe_add(q)は、(X、T))、S)、B safe_add) } 関数FFを(A A、B、C、D、X、S、T){ 戻り CMN((B&C)|((〜B)およびD)、A、B、X、S、T) } 関数GG(A、B、 C、D、X、S、T){ 戻り CMN((B&D)|(C&(〜D))、A、B、X、S、T) } 関数HH(A、B、C、D、X、S、T){ 戻り CMN(B ^ C ^ D、A、B、X、S、T) } 関数II(A、B、C、D、X、 S、T){ 戻り CMN(C ^(B |(〜D))、A、B、X、S、T) } / * *アレイを製造する、リトルエンディアンワードの配列のMD5を計算 *のリトルエンディアンの言葉。 * / 関数coreMD5(X){ VAR A = 1732584193 するvar B = -271733879 VAR C = -1732584194 するvar D = 271733878 ため(VAR i = 0; iはx.lengthを<; I + = 16 ){ VARの oldaは= VARを OLDB = Bの VAR oldc = C VARしかもoldd = D = FFの(A、B、C、D、X [I + 0]、7、-680876936 ) のD =用FF(D、A、B、C、X [I + 1 ]、12、-389564586 ) C = FFの(C、D、A、B、X [I + 2]、17、606105819 ) のB = FFの(B、C、D、X [I + 3]、22 、-1044525330 ) = FFの(A、B、C、D、X [I + 4]、7、-176418897 ) のD =用FF(D、A、B、C、X [I + 5]、12、1200080426 ) のC = FFの(C、D、A、B、X [I + 6]、17、-1473231341 ) のB = FFの(B、C、D、X [I + 7]、22、-45705983 ) A= FFの(A、B、C、D、X [I + 8]、7、1770035416 ) のD =用FF(D、A、B、C、X [I + 9]、12、-1958414417 ) C = FFの( C、D、A、B、Xが[iが10 +]、17、-42063 ) のB = FFの(B、C、D、-1990404162、22、X [iが11 +] ) = FFの(、 B、C、D、X [iが12 +]、7、1804603682 ) D =のFF(D、A、B、C、X [iが13 +]、12、-40341101 ) のC = FFの(C、D、 A、B、X 17、-1502002290、[私は14 +] ) のB = FFの(B、C、D、X [I 15 +]、22、1236535329 ) A = GG(A、B、C、D、 X [I + 1]、5、-165796510 ) D = GG(D、A、B、C、X [I + 6]、9、-1069501632) C = GG(C、D、A、B、X [I 11 +]、14、643717713 ) B = GG(B、C、D、X [I + 0]、20、-373897302 ) A = GG(A、B、C、D、X [I + 5]、5、-701558691 ) D = GG(D、A、B、C、X 38016083、9、[iが10 +] ) C = GG(C 、D、A、B、X [I 15 +]、14、-660478335 ) B = GG(B、C、D、X [I + 4]、20、-405537848 ) A = GG(B 、C、D、X [I + 9]、5、568446438 ) D = GG(D、A、B、C、X 9、-1019803690、[私は14 +] ) C、= GG(C、D B、X [I + 3]、14、-187363961 ) B= GG(B、C、D、X [iが+ 8]、20、1163531501 ) A = GG(A、B、C、D、X [iが13 +]、5、-1444681467 ) D = GG( D、A、B、C、X [I + 2]、9、-51403784 ) C = GG(C、D、A、B、X [I + 7]、14、1735328473 ) B = GG(B、C 、D、-1926607734、20、X [iが12 +] ) =のHH(A、B、C、D、X [I + 5]、4、-378558 ) のD =のHH(D、B 、C、X [I + 8]、11、-2022574463 ) C =のHH(C、D、A、B、xは、16、1839030562 [iが11 +] ) bは、=のHH(B、C、D、 X、23、[私は14 +] -35309556 ) =のHH(A、B、C、D、X [I + 1]、4、-1530992060 ) D =のHH(D、A、B、C、X [I + 4]、11、1272893353 ) C =のHH(C、D、A、B、X [I + 7]、16、-155497632 ) B = HH (B、C、D、-1094730640、23、X [iが10 +] ) =のHH(A、B、C、D、X [iが13 +]、4、681279174 ) のD =のHH(D、 A、B、C、X [I + 0]、11、-358537222 ) C =のHH(C、D、A、B、X [I + 3]、16、-722521979 ) のB =のHH(B、C、 D、X [I + 6]、23、76029189 ) =のHH(A、B、C、D、X [I + 9]、4、-640364487 ) のD =のHH(D、A、B、C 、X -421815835、11、[I + 12] ) C=のHh(C、D、A、B、Xは、16、530742520 [iが15 +] ) B =のHH(B、C、D、Xは[I + 2]、23、-995338651 ) A = II( A、B、C、D、X [I + 0]、6、-198630844 ) dは = II(D、A、B、C、X [I + 7]、10、1126891415 ) C = II(C、Dそして、B、X -1416354905、15、[私は14 +] ) B = II(B、C、D、X [I + 5]、21、-57434055 ) A = II(A、B、C 、D、X [iが12 +]、6、1700485571 ) dは = II(D、A、B、C、X [I + 3]、10、-1894986606 ) C = II(C、D、A、B、 X -1051523、15、[iが10 +] ) B = II(B、C、D、X [I + 1]、21、-2054922799) A = II(A、B、C、D、X [I + 8]、6、1873313359 ) dは = II(D、A、B、C、X、10、[私は15 +] -30611744 ) C = II(C、D、A、B、X [I + 6]、15、-1560198380 ) B = II(B、C、D、X 1309151649、21、[私は13 +] ) および = II(A A、B、C、D、X [I + 4]、6、-145523070 ) D = II(D、A、B、C、X [iが11 +]、10、-1120210379 ) C = II(C、Dそして、B、X [I + 2]、15、718787259 ) B = II(B、C、D、X [I + 9]、21、-343485551 ) 及び = safe_add(olda) B = safe_add(B、OLDB) C = safe_add(C、oldc) D = safe_add(D、しかもoldd) } 戻り[A、B、C、D] } / * * 16進文字列にリトルエンディアンワードの配列を変換します。 * / 関数binl2hex(binarray){ VARの hex_tab = "0123456789ABCDEF" VaRの STR = "" のための(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))& * base64でエンコードされた文字列にリトルエンディアンの単語の配列に変換します。 * / 関数binl2b64(binarray){ VARのタブ= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /" VARの STR = "" のための(VAR i = 0; iは<binarray.length * 32、I + = 6 ){ STR + = tab.charAt((( binarray [I >> 5] <<(I%32))とは0x3F)| ((binarray [I >> 5 + 1] >>(32 - I%32))とは0x3F )) } 戻りSTR } / * *格納された16ワードのブロックのシーケンスに8ビット文字列に変換 アレイとして* 文字のいずれかが> 255の場合は*、高いバイトは黙って無視されます。 * / 関数str2binl(STR){ VARの nblk =((str.length + 8)>> 6)+ 1 // 16ワードブロックの数 VAR BLKS = 新しいアレイ(nblk * 16 ) のための(VAR I = 0;私は16 * nblk <;私は、[I] = 0)BLKS ++のために(VAR ; I <str.length私は++ i = 0 ) BLKS [I |&0xFFで)<< >> 2] =(str.charCodeAt(I) ((I 4%)* 8 ) BLKS [I >> 2] | = 0x80の<<((I 4%)* 8 ) BLKS [nblk * 16から2] = str.length * 8 戻りBLKS } / * *として格納された16ワードのブロックの配列にワイド文字列に変換 アレイ*、及びMD4 / 5の計算のために適切なパディングを追加します。 * / 関数strw2binl(STR){ VARの nblk =((str.length + 4)>> 5)+ 1 // 16ワードブロックの数 VAR BLKS = 新しいアレイ(nblk * 16 ) のための(VAR I = 0;私はnblk * 16 <; iは++)BLKS [I] = 0 のための(VAR i = 0; I <str.length; iは++ ) BLKS [I >> 1] | = str.charCodeAt(I)<<((I% 2)* 16 ) BLKS [I >> 1] | = 0x80の<<((I 2%)* 16 ) BLKS [nblk* 16から2] = str.length * 16 リターンBLKS } / * *外部インタフェース* / 機能 hexMD5(STR){ 戻りbinl2hex(coreMD5(str2binl(STR)))} 関数 hexMD5w(STR){ 戻りbinl2hex(coreMD5( strw2binl(STR)))} 関数 b64MD5(STR){ 戻りbinl2b64(coreMD5(str2binl(STR)))} 関数 b64MD5w(STR){ 戻りbinl2b64(coreMD5(strw2binl(STR)))} / * 下位互換性* / 機能 calcMD5(STR){ 戻りbinl2hex(coreMD5(str2binl(STR)))} module.exportsは = { hexMD5:hexMD5 }
参考文献:
CONST MD5 =(」../../のutilsの必要 / MD5"を);
小文字を使用して:(これは、最終的な希望の文字列はケース低下させます)
md5.hexMD5(STR).toLowerCase()