2個JS版的MD5加密指令碼

來源:互聯網
上載者:User
版本1代碼如下:
<script language="JavaScript"><br /><!--<br />/*<br />*****************************************************************************<br />* md5.js<br />*<br />* A JavaScript implementation of the RSA Data Security, Inc. MD5<br />* Message-Digest Algorithm.<br />*<br />* Copyright (C) Paul Johnston 1999. Distributed under the LGPL.<br />*****************************************************************************/</p><p>/* to convert strings to a list of ascii values */<br />var sAscii = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"<br />var sAscii = sAscii + "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";</p><p>/* convert integer to hex string */<br />var sHex = "0123456789abcdef"<br />function hex(i)<br />{<br /> h = "";<br /> for(j = 0; j <= 3; j++)<br /> {<br /> h += sHex.charAt((i >> (j * 8 + 4)) & 0x0F) +<br /> sHex.charAt((i >> (j * 8)) & 0x0F);<br /> }<br /> return h;<br />}</p><p>/* add, handling overflows correctly */<br />function add(x, y)<br />{<br /> return ((x&0x7FFFFFFF) + (y&0x7FFFFFFF)) ^ (x&0x80000000) ^ (y&0x80000000);<br />}</p><p>/* MD5 rounds functions */<br />function R1(A, B, C, D, X, S, T)<br />{<br /> q = add(add(A, (B & C) | (~B & D)), add(X, T));<br /> return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);<br />}</p><p>function R2(A, B, C, D, X, S, T)<br />{<br /> q = add(add(A, (B & D) | (C & ~D)), add(X, T));<br /> return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);<br />}</p><p>function R3(A, B, C, D, X, S, T)<br />{<br /> q = add(add(A, B ^ C ^ D), add(X, T));<br /> return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);<br />}</p><p>function R4(A, B, C, D, X, S, T)<br />{<br /> q = add(add(A, C ^ (B | ~D)), add(X, T));<br /> return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);<br />}</p><p>/* main entry point */<br />function calcMD5(sInp,Type) {</p><p> /* Calculate length in machine words, including padding */<br /> wLen = (((sInp.length + 8) >> 6) + 1) << 4;<br /> var X = new Array(wLen);</p><p> /* Convert string to array of words */<br /> j = 4;<br /> for (i = 0; (i * 4) < sInp.length; i++)<br /> {<br /> X[i] = 0;<br /> for (j = 0; (j < 4) && ((j + i * 4) < sInp.length); j++)<br /> {<br /> X[i] += (sAscii.indexOf(sInp.charAt((i * 4) + j)) + 32) << (j * 8);<br /> }<br /> }</p><p> /* Append padding bits and length */<br /> if (j == 4)<br /> {<br /> X[i++] = 0x80;<br /> }<br /> else<br /> {<br /> X[i - 1] += 0x80 << (j * 8);<br /> }<br /> for(; i < wLen; i++) { X[i] = 0; }<br /> X[wLen - 2] = sInp.length * 8;</p><p> /* hard-coded initial values */<br /> a = 0x67452301;<br /> b = 0xefcdab89;<br /> c = 0x98badcfe;<br /> d = 0x10325476;</p><p> /* Process each 16-word block in turn */<br /> for (i = 0; i < wLen; i += 16) {<br /> aO = a;<br /> bO = b;<br /> cO = c;<br /> dO = d;</p><p> a = R1(a, b, c, d, X[i+ 0], 7 , 0xd76aa478);<br /> d = R1(d, a, b, c, X[i+ 1], 12, 0xe8c7b756);<br /> c = R1(c, d, a, b, X[i+ 2], 17, 0x242070db);<br /> b = R1(b, c, d, a, X[i+ 3], 22, 0xc1bdceee);<br /> a = R1(a, b, c, d, X[i+ 4], 7 , 0xf57c0faf);<br /> d = R1(d, a, b, c, X[i+ 5], 12, 0x4787c62a);<br /> c = R1(c, d, a, b, X[i+ 6], 17, 0xa8304613);<br /> b = R1(b, c, d, a, X[i+ 7], 22, 0xfd469501);<br /> a = R1(a, b, c, d, X[i+ 8], 7 , 0x698098d8);<br /> d = R1(d, a, b, c, X[i+ 9], 12, 0x8b44f7af);<br /> c = R1(c, d, a, b, X[i+10], 17, 0xffff5bb1);<br /> b = R1(b, c, d, a, X[i+11], 22, 0x895cd7be);<br /> a = R1(a, b, c, d, X[i+12], 7 , 0x6b901122);<br /> d = R1(d, a, b, c, X[i+13], 12, 0xfd987193);<br /> c = R1(c, d, a, b, X[i+14], 17, 0xa679438e);<br /> b = R1(b, c, d, a, X[i+15], 22, 0x49b40821);</p><p> a = R2(a, b, c, d, X[i+ 1], 5 , 0xf61e2562);<br /> d = R2(d, a, b, c, X[i+ 6], 9 , 0xc040b340);<br /> c = R2(c, d, a, b, X[i+11], 14, 0x265e5a51);<br /> b = R2(b, c, d, a, X[i+ 0], 20, 0xe9b6c7aa);<br /> a = R2(a, b, c, d, X[i+ 5], 5 , 0xd62f105d);<br /> d = R2(d, a, b, c, X[i+10], 9 , 0x2441453);<br /> c = R2(c, d, a, b, X[i+15], 14, 0xd8a1e681);<br /> b = R2(b, c, d, a, X[i+ 4], 20, 0xe7d3fbc8);<br /> a = R2(a, b, c, d, X[i+ 9], 5 , 0x21e1cde6);<br /> d = R2(d, a, b, c, X[i+14], 9 , 0xc33707d6);<br /> c = R2(c, d, a, b, X[i+ 3], 14, 0xf4d50d87);<br /> b = R2(b, c, d, a, X[i+ 8], 20, 0x455a14ed);<br /> a = R2(a, b, c, d, X[i+13], 5 , 0xa9e3e905);<br /> d = R2(d, a, b, c, X[i+ 2], 9 , 0xfcefa3f8);<br /> c = R2(c, d, a, b, X[i+ 7], 14, 0x676f02d9);<br /> b = R2(b, c, d, a, X[i+12], 20, 0x8d2a4c8a);</p><p> a = R3(a, b, c, d, X[i+ 5], 4 , 0xfffa3942);<br /> d = R3(d, a, b, c, X[i+ 8], 11, 0x8771f681);<br /> c = R3(c, d, a, b, X[i+11], 16, 0x6d9d6122);<br /> b = R3(b, c, d, a, X[i+14], 23, 0xfde5380c);<br /> a = R3(a, b, c, d, X[i+ 1], 4 , 0xa4beea44);<br /> d = R3(d, a, b, c, X[i+ 4], 11, 0x4bdecfa9);<br /> c = R3(c, d, a, b, X[i+ 7], 16, 0xf6bb4b60);<br /> b = R3(b, c, d, a, X[i+10], 23, 0xbebfbc70);<br /> a = R3(a, b, c, d, X[i+13], 4 , 0x289b7ec6);<br /> d = R3(d, a, b, c, X[i+ 0], 11, 0xeaa127fa);<br /> c = R3(c, d, a, b, X[i+ 3], 16, 0xd4ef3085);<br /> b = R3(b, c, d, a, X[i+ 6], 23, 0x4881d05);<br /> a = R3(a, b, c, d, X[i+ 9], 4 , 0xd9d4d039);<br /> d = R3(d, a, b, c, X[i+12], 11, 0xe6db99e5);<br /> c = R3(c, d, a, b, X[i+15], 16, 0x1fa27cf8);<br /> b = R3(b, c, d, a, X[i+ 2], 23, 0xc4ac5665);</p><p> a = R4(a, b, c, d, X[i+ 0], 6 , 0xf4292244);<br /> d = R4(d, a, b, c, X[i+ 7], 10, 0x432aff97);<br /> c = R4(c, d, a, b, X[i+14], 15, 0xab9423a7);<br /> b = R4(b, c, d, a, X[i+ 5], 21, 0xfc93a039);<br /> a = R4(a, b, c, d, X[i+12], 6 , 0x655b59c3);<br /> d = R4(d, a, b, c, X[i+ 3], 10, 0x8f0ccc92);<br /> c = R4(c, d, a, b, X[i+10], 15, 0xffeff47d);<br /> b = R4(b, c, d, a, X[i+ 1], 21, 0x85845dd1);<br /> a = R4(a, b, c, d, X[i+ 8], 6 , 0x6fa87e4f);<br /> d = R4(d, a, b, c, X[i+15], 10, 0xfe2ce6e0);<br /> c = R4(c, d, a, b, X[i+ 6], 15, 0xa3014314);<br /> b = R4(b, c, d, a, X[i+13], 21, 0x4e0811a1);<br /> a = R4(a, b, c, d, X[i+ 4], 6 , 0xf7537e82);<br /> d = R4(d, a, b, c, X[i+11], 10, 0xbd3af235);<br /> c = R4(c, d, a, b, X[i+ 2], 15, 0x2ad7d2bb);<br /> b = R4(b, c, d, a, X[i+ 9], 21, 0xeb86d391);</p><p> a = add(a, aO);<br /> b = add(b, bO);<br /> c = add(c, cO);<br /> d = add(d, dO);<br /> }<br /> if (Type == 32)<br /> {<br />return hex(a) + hex(b) + hex(c) + hex(d);<br /> }<br /> else<br /> {<br />return hex(b) + hex(c);<br />//Dicky modified this to fit 16byte database password @ 2005-9-2 11:21:15<br /> }<br />}</p><p>//調用方法<br />alert(calcMD5("admin",16));<br />//--><br /></script>
[Ctrl+A 全選 提示:你可先修改部分代碼,再點運行代碼]

版本2代碼如下:
<script language="javascript"><br /><!--<br />function ByteMD5(arr,Type)//array of byte : arr[i] => [0,256)<br />{<br />return binl2hex(coreMD5( arr2binl(arr)))<br />function safe_add(x, y)<br />{<br />var lsw = (x & 0xFFFF) + (y & 0xFFFF)<br />var msw = (x >> 16) + (y >> 16) + (lsw >> 16)<br />return (msw << 16) | (lsw & 0xFFFF)<br />}<br />function rol(num, cnt)<br />{<br />return (num << cnt) | (num >>> (32 - cnt))<br />}<br />function cmn(q, a, b, x, s, t)<br />{<br />return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)<br />}<br />function ff(a, b, c, d, x, s, t)<br />{<br />return cmn((b & c) | ((~b) & d), a, b, x, s, t)<br />}<br />function gg(a, b, c, d, x, s, t)<br />{<br />return cmn((b & d) | (c & (~d)), a, b, x, s, t)<br />}<br />function hh(a, b, c, d, x, s, t)<br />{<br />return cmn(b ^ c ^ d, a, b, x, s, t)<br />}<br />function ii(a, b, c, d, x, s, t)<br />{<br />return cmn(c ^ (b | (~d)), a, b, x, s, t)<br />}<br />function coreMD5(x)<br />{<br />var a = 1732584193<br />var b = -271733879<br />var c = -1732584194<br />var d = 271733878<br />for(var i = 0; i < x.length; i += 16)<br />{<br />var olda = a<br />var oldb = b<br />var oldc = c<br />var oldd = d<br />a = ff(a, b, c, d, x[i+ 0], 7 , -680876936)<br />d = ff(d, a, b, c, x[i+ 1], 12, -389564586)<br />c = ff(c, d, a, b, x[i+ 2], 17, 606105819)<br />b = ff(b, c, d, a, x[i+ 3], 22, -1044525330)<br />a = ff(a, b, c, d, x[i+ 4], 7 , -176418897)<br />d = ff(d, a, b, c, x[i+ 5], 12, 1200080426)<br />c = ff(c, d, a, b, x[i+ 6], 17, -1473231341)<br />b = ff(b, c, d, a, x[i+ 7], 22, -45705983)<br />a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416)<br />d = ff(d, a, b, c, x[i+ 9], 12, -1958414417)<br />c = ff(c, d, a, b, x[i+10], 17, -42063)<br />b = ff(b, c, d, a, x[i+11], 22, -1990404162)<br />a = ff(a, b, c, d, x[i+12], 7 , 1804603682)<br />d = ff(d, a, b, c, x[i+13], 12, -40341101)<br />c = ff(c, d, a, b, x[i+14], 17, -1502002290)<br />b = ff(b, c, d, a, x[i+15], 22, 1236535329)<br />a = gg(a, b, c, d, x[i+ 1], 5 , -165796510)<br />d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632)<br />c = gg(c, d, a, b, x[i+11], 14, 643717713)<br />b = gg(b, c, d, a, x[i+ 0], 20, -373897302)<br />a = gg(a, b, c, d, x[i+ 5], 5 , -701558691)<br />d = gg(d, a, b, c, x[i+10], 9 , 38016083)<br />c = gg(c, d, a, b, x[i+15], 14, -660478335)<br />b = gg(b, c, d, a, x[i+ 4], 20, -405537848)<br />a = gg(a, b, c, d, x[i+ 9], 5 , 568446438)<br />d = gg(d, a, b, c, x[i+14], 9 , -1019803690)<br />c = gg(c, d, a, b, x[i+ 3], 14, -187363961)<br />b = gg(b, c, d, a, x[i+ 8], 20, 1163531501)<br />a = gg(a, b, c, d, x[i+13], 5 , -1444681467)<br />d = gg(d, a, b, c, x[i+ 2], 9 , -51403784)<br />c = gg(c, d, a, b, x[i+ 7], 14, 1735328473)<br />b = gg(b, c, d, a, x[i+12], 20, -1926607734)<br />a = hh(a, b, c, d, x[i+ 5], 4 , -378558)<br />d = hh(d, a, b, c, x[i+ 8], 11, -2022574463)<br />c = hh(c, d, a, b, x[i+11], 16, 1839030562)<br />b = hh(b, c, d, a, x[i+14], 23, -35309556)<br />a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060)<br />d = hh(d, a, b, c, x[i+ 4], 11, 1272893353)<br />c = hh(c, d, a, b, x[i+ 7], 16, -155497632)<br />b = hh(b, c, d, a, x[i+10], 23, -1094730640)<br />a = hh(a, b, c, d, x[i+13], 4 , 681279174)<br />d = hh(d, a, b, c, x[i+ 0], 11, -358537222)<br />c = hh(c, d, a, b, x[i+ 3], 16, -722521979)<br />b = hh(b, c, d, a, x[i+ 6], 23, 76029189)<br />a = hh(a, b, c, d, x[i+ 9], 4 , -640364487)<br />d = hh(d, a, b, c, x[i+12], 11, -421815835)<br />c = hh(c, d, a, b, x[i+15], 16, 530742520)<br />b = hh(b, c, d, a, x[i+ 2], 23, -995338651)<br />a = ii(a, b, c, d, x[i+ 0], 6 , -198630844)<br />d = ii(d, a, b, c, x[i+ 7], 10, 1126891415)<br />c = ii(c, d, a, b, x[i+14], 15, -1416354905)<br />b = ii(b, c, d, a, x[i+ 5], 21, -57434055)<br />a = ii(a, b, c, d, x[i+12], 6 , 1700485571)<br />d = ii(d, a, b, c, x[i+ 3], 10, -1894986606)<br />c = ii(c, d, a, b, x[i+10], 15, -1051523)<br />b = ii(b, c, d, a, x[i+ 1], 21, -2054922799)<br />a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359)<br />d = ii(d, a, b, c, x[i+15], 10, -30611744)<br />c = ii(c, d, a, b, x[i+ 6], 15, -1560198380)<br />b = ii(b, c, d, a, x[i+13], 21, 1309151649)<br />a = ii(a, b, c, d, x[i+ 4], 6 , -145523070)<br />d = ii(d, a, b, c, x[i+11], 10, -1120210379)<br />c = ii(c, d, a, b, x[i+ 2], 15, 718787259)<br />b = ii(b, c, d, a, x[i+ 9], 21, -343485551)<br />a = safe_add(a, olda)<br />b = safe_add(b, oldb)<br />c = safe_add(c, oldc)<br />d = safe_add(d, oldd)<br />}<br />if (Type == 32)<br />{<br />return [a, b, c, d];<br />}<br />else<br />{<br />return [b, c];<br />//Dicky modified this to fit 16byte database password @ 2005-9-2 11:21:15<br />}<br />}<br />function binl2hex(binarray)<br />{<br />var hex_tab = "0123456789abcdef"<br />var str = ""<br />for(var i = 0; i < binarray.length * 4; i++)<br />{<br />str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +<br />hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF)<br />}<br />return str<br />}<br />function arr2binl(arr)<br />{<br />var nblk = ((arr.length + 8) >> 6) + 1<br />var blks = new Array(nblk * 16)<br />for(var i = 0; i < nblk * 16; i++) blks[i] = 0<br />for(var i = 0; i < arr.length; i++)<br />blks[i>>2] |= (arr[i] & 0xFF) << ((i%4) * 8)<br />blks[i>>2] |= 0x80 << ((i%4) * 8)<br />blks[nblk*16-2] = arr.length * 8<br />return blks<br />}<br />}</p><p>function String.prototype.MD5(Type)<br />{<br />var len=this.length;<br />var arr=new Array(len);<br />for(var i=0;i<len;i++)<br />{<br />var cc=this.charCodeAt(i);<br />arr[i]=cc&0xFF;<br />}<br />return ByteMD5(arr,Type);<br />}<br />//調用方法<br />alert("admin".MD5(16));<br />//--><br /></script>
[Ctrl+A 全選 提示:你可先修改部分代碼,再點運行代碼]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.