zoukankan
html css js c++ java
2个JS版的MD5加密脚本
版本1代码如下:
<script language="JavaScript"> <!-- /* ***************************************************************************** * md5.js * * A JavaScript implementation of the RSA Data Security, Inc. MD5 * Message-Digest Algorithm. * * Copyright (C) Paul Johnston 1999. Distributed under the LGPL. *****************************************************************************/ /* to convert strings to a list of ascii values */ var sAscii = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ" var sAscii = sAscii + "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; /* convert integer to hex string */ var sHex = "0123456789abcdef" function hex(i) { h = ""; for(j = 0; j <= 3; j++) { h += sHex.charAt((i >> (j * 8 + 4)) & 0x0F) + sHex.charAt((i >> (j * 8)) & 0x0F); } return h; } /* add, handling overflows correctly */ function add(x, y) { return ((x&0x7FFFFFFF) + (y&0x7FFFFFFF)) ^ (x&0x80000000) ^ (y&0x80000000); } /* MD5 rounds functions */ function R1(A, B, C, D, X, S, T) { q = add(add(A, (B & C) | (~B & D)), add(X, T)); return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B); } function R2(A, B, C, D, X, S, T) { q = add(add(A, (B & D) | (C & ~D)), add(X, T)); return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B); } function R3(A, B, C, D, X, S, T) { q = add(add(A, B ^ C ^ D), add(X, T)); return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B); } function R4(A, B, C, D, X, S, T) { q = add(add(A, C ^ (B | ~D)), add(X, T)); return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B); } /* main entry point */ function calcMD5(sInp,Type) { /* Calculate length in machine words, including padding */ wLen = (((sInp.length + 8) >> 6) + 1) << 4; var X = new Array(wLen); /* Convert string to array of words */ j = 4; for (i = 0; (i * 4) < sInp.length; i++) { X[i] = 0; for (j = 0; (j < 4) && ((j + i * 4) < sInp.length); j++) { X[i] += (sAscii.indexOf(sInp.charAt((i * 4) + j)) + 32) << (j * 8); } } /* Append padding bits and length */ if (j == 4) { X[i++] = 0x80; } else { X[i - 1] += 0x80 << (j * 8); } for(; i < wLen; i++) { X[i] = 0; } X[wLen - 2] = sInp.length * 8; /* hard-coded initial values */ a = 0x67452301; b = 0xefcdab89; c = 0x98badcfe; d = 0x10325476; /* Process each 16-word block in turn */ for (i = 0; i < wLen; i += 16) { aO = a; bO = b; cO = c; dO = d; a = R1(a, b, c, d, X[i+ 0], 7 , 0xd76aa478); d = R1(d, a, b, c, X[i+ 1], 12, 0xe8c7b756); c = R1(c, d, a, b, X[i+ 2], 17, 0x242070db); b = R1(b, c, d, a, X[i+ 3], 22, 0xc1bdceee); a = R1(a, b, c, d, X[i+ 4], 7 , 0xf57c0faf); d = R1(d, a, b, c, X[i+ 5], 12, 0x4787c62a); c = R1(c, d, a, b, X[i+ 6], 17, 0xa8304613); b = R1(b, c, d, a, X[i+ 7], 22, 0xfd469501); a = R1(a, b, c, d, X[i+ 8], 7 , 0x698098d8); d = R1(d, a, b, c, X[i+ 9], 12, 0x8b44f7af); c = R1(c, d, a, b, X[i+10], 17, 0xffff5bb1); b = R1(b, c, d, a, X[i+11], 22, 0x895cd7be); a = R1(a, b, c, d, X[i+12], 7 , 0x6b901122); d = R1(d, a, b, c, X[i+13], 12, 0xfd987193); c = R1(c, d, a, b, X[i+14], 17, 0xa679438e); b = R1(b, c, d, a, X[i+15], 22, 0x49b40821); a = R2(a, b, c, d, X[i+ 1], 5 , 0xf61e2562); d = R2(d, a, b, c, X[i+ 6], 9 , 0xc040b340); c = R2(c, d, a, b, X[i+11], 14, 0x265e5a51); b = R2(b, c, d, a, X[i+ 0], 20, 0xe9b6c7aa); a = R2(a, b, c, d, X[i+ 5], 5 , 0xd62f105d); d = R2(d, a, b, c, X[i+10], 9 , 0x2441453); c = R2(c, d, a, b, X[i+15], 14, 0xd8a1e681); b = R2(b, c, d, a, X[i+ 4], 20, 0xe7d3fbc8); a = R2(a, b, c, d, X[i+ 9], 5 , 0x21e1cde6); d = R2(d, a, b, c, X[i+14], 9 , 0xc33707d6); c = R2(c, d, a, b, X[i+ 3], 14, 0xf4d50d87); b = R2(b, c, d, a, X[i+ 8], 20, 0x455a14ed); a = R2(a, b, c, d, X[i+13], 5 , 0xa9e3e905); d = R2(d, a, b, c, X[i+ 2], 9 , 0xfcefa3f8); c = R2(c, d, a, b, X[i+ 7], 14, 0x676f02d9); b = R2(b, c, d, a, X[i+12], 20, 0x8d2a4c8a); a = R3(a, b, c, d, X[i+ 5], 4 , 0xfffa3942); d = R3(d, a, b, c, X[i+ 8], 11, 0x8771f681); c = R3(c, d, a, b, X[i+11], 16, 0x6d9d6122); b = R3(b, c, d, a, X[i+14], 23, 0xfde5380c); a = R3(a, b, c, d, X[i+ 1], 4 , 0xa4beea44); d = R3(d, a, b, c, X[i+ 4], 11, 0x4bdecfa9); c = R3(c, d, a, b, X[i+ 7], 16, 0xf6bb4b60); b = R3(b, c, d, a, X[i+10], 23, 0xbebfbc70); a = R3(a, b, c, d, X[i+13], 4 , 0x289b7ec6); d = R3(d, a, b, c, X[i+ 0], 11, 0xeaa127fa); c = R3(c, d, a, b, X[i+ 3], 16, 0xd4ef3085); b = R3(b, c, d, a, X[i+ 6], 23, 0x4881d05); a = R3(a, b, c, d, X[i+ 9], 4 , 0xd9d4d039); d = R3(d, a, b, c, X[i+12], 11, 0xe6db99e5); c = R3(c, d, a, b, X[i+15], 16, 0x1fa27cf8); b = R3(b, c, d, a, X[i+ 2], 23, 0xc4ac5665); a = R4(a, b, c, d, X[i+ 0], 6 , 0xf4292244); d = R4(d, a, b, c, X[i+ 7], 10, 0x432aff97); c = R4(c, d, a, b, X[i+14], 15, 0xab9423a7); b = R4(b, c, d, a, X[i+ 5], 21, 0xfc93a039); a = R4(a, b, c, d, X[i+12], 6 , 0x655b59c3); d = R4(d, a, b, c, X[i+ 3], 10, 0x8f0ccc92); c = R4(c, d, a, b, X[i+10], 15, 0xffeff47d); b = R4(b, c, d, a, X[i+ 1], 21, 0x85845dd1); a = R4(a, b, c, d, X[i+ 8], 6 , 0x6fa87e4f); d = R4(d, a, b, c, X[i+15], 10, 0xfe2ce6e0); c = R4(c, d, a, b, X[i+ 6], 15, 0xa3014314); b = R4(b, c, d, a, X[i+13], 21, 0x4e0811a1); a = R4(a, b, c, d, X[i+ 4], 6 , 0xf7537e82); d = R4(d, a, b, c, X[i+11], 10, 0xbd3af235); c = R4(c, d, a, b, X[i+ 2], 15, 0x2ad7d2bb); b = R4(b, c, d, a, X[i+ 9], 21, 0xeb86d391); a = add(a, aO); b = add(b, bO); c = add(c, cO); d = add(d, dO); } if (Type == 32) { return hex(a) + hex(b) + hex(c) + hex(d); } else { return hex(b) + hex(c); //Dicky modified this to fit 16byte database password @ 2005-9-2 11:21:15 } } //调用方法 alert(calcMD5("admin",16)); //--> </script>
[Ctrl+A 全选 提示:你可先修改部分代码,再点运行代码]
版本2代码如下:
<script language="javascript"> <!-- function ByteMD5(arr,Type)//array of byte : arr[i] => [0,256) { return binl2hex(coreMD5( arr2binl(arr))) function safe_add(x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF) var msw = (x >> 16) + (y >> 16) + (lsw >> 16) return (msw << 16) | (lsw & 0xFFFF) } function rol(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)) } function cmn(q, a, b, x, s, t) { return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b) } function ff(a, b, c, d, x, s, t) { return cmn((b & c) | ((~b) & d), a, b, x, s, t) } function gg(a, b, c, d, x, s, t) { return cmn((b & d) | (c & (~d)), a, b, x, s, t) } function hh(a, b, c, d, x, s, t) { return cmn(b ^ c ^ d, a, b, x, s, t) } function ii(a, b, c, d, x, s, t) { return cmn(c ^ (b | (~d)), a, b, x, s, t) } function coreMD5(x) { 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 = 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, a, x[i+ 3], 22, -1044525330) a = 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, a, 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, a, x[i+11], 22, -1990404162) a = ff(a, 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[i+14], 17, -1502002290) b = ff(b, c, d, a, 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, a, x[i+ 0], 20, -373897302) a = gg(a, b, c, d, x[i+ 5], 5 , -701558691) d = gg(d, a, b, c, x[i+10], 9 , 38016083) c = gg(c, d, a, b, x[i+15], 14, -660478335) b = gg(b, c, d, a, x[i+ 4], 20, -405537848) a = gg(a, b, c, d, x[i+ 9], 5 , 568446438) d = gg(d, a, b, c, x[i+14], 9 , -1019803690) c = gg(c, d, a, b, x[i+ 3], 14, -187363961) b = gg(b, c, d, a, 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, a, x[i+12], 20, -1926607734) a = hh(a, b, c, d, x[i+ 5], 4 , -378558) d = hh(d, a, b, c, x[i+ 8], 11, -2022574463) c = hh(c, d, a, b, x[i+11], 16, 1839030562) b = hh(b, c, d, a, x[i+14], 23, -35309556) a = 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, a, x[i+10], 23, -1094730640) a = 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, a, x[i+ 6], 23, 76029189) a = hh(a, b, c, d, x[i+ 9], 4 , -640364487) d = hh(d, a, b, c, x[i+12], 11, -421815835) c = hh(c, d, a, b, x[i+15], 16, 530742520) b = hh(b, c, d, a, 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, a, b, x[i+14], 15, -1416354905) b = ii(b, c, d, a, 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[i+10], 15, -1051523) b = ii(b, c, d, a, x[i+ 1], 21, -2054922799) a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359) d = ii(d, a, b, c, x[i+15], 10, -30611744) c = ii(c, d, a, b, x[i+ 6], 15, -1560198380) b = ii(b, c, d, a, x[i+13], 21, 1309151649) a = ii(a, b, c, d, x[i+ 4], 6 , -145523070) d = ii(d, a, b, c, x[i+11], 10, -1120210379) c = ii(c, d, a, b, x[i+ 2], 15, 718787259) b = 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) } if (Type == 32) { return [a, b, c, d]; } else { return [b, c]; //Dicky modified this to fit 16byte database password @ 2005-9-2 11:21:15 } } function binl2hex(binarray) { var hex_tab = "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 } function arr2binl(arr) { var nblk = ((arr.length + 8) >> 6) + 1 var blks = new Array(nblk * 16) for(var i = 0; i < nblk * 16; i++) blks[i] = 0 for(var i = 0; i < arr.length; i++) blks[i>>2] |= (arr[i] & 0xFF) << ((i%4) * 8) blks[i>>2] |= 0x80 << ((i%4) * 8) blks[nblk*16-2] = arr.length * 8 return blks } } function String.prototype.MD5(Type) { var len=this.length; var arr=new Array(len); for(var i=0;i<len;i++) { var cc=this.charCodeAt(i); arr[i]=cc&0xFF; } return ByteMD5(arr,Type); } //调用方法 alert("admin".MD5(16)); //--> </script>
[Ctrl+A 全选 提示:你可先修改部分代码,再点运行代码]
青苹果Web应用商店
https://webapp.taobao.com/
PHP/ASP.NET/ASP/UCHOME/DISCUZ! X系列网站开发,详细需求联系
QQ:8511978
查看全文
相关阅读:
LeetCode Longest Uncommon Subsequence II
Leetcode Longest Uncommon Subsequence I
LeetCode 557. Reverse Words in a String III
LeetCode 394. Decode String
LeetCode 419. Battleships in a Board
LeetCode 366. Find Leaves of Binary Tree
LeetCode 408. Valid Word Abbreviation
LeetCode 532. K-diff Pairs in an Array
LeetCode Minimum Absolute Difference in BST
LeetCode 414. Third Maximum Number
原文地址:https://www.cnblogs.com/Dicky/p/228614.html
最新文章
LeetCode Range Addition II
LeetCode Range Addition
LeetCode Minimum Index Sum of Two Lists
LeetCode Binary Tree Tilt
LeetCode 628. Maximum Product of Three Numbers
LeetCode Convert BST to Greater Tree
LeetCode Trim a Binary Search Tree
LeetCode Judge Route Circle
Java String Split Method
LeetCode Two Sum IV
热门文章
LeetCode 637. Average of Levels in Binary Tree
LeetCode 617. Merge Two Binary Trees
LeetCode Maximum Distance in Arrays
LeetCode Find Mode in Binary Search Tree
LeetCode 543. Diameter of Binary Tree
LeetCode Construct String from Binary Tree
LeetCode 561. Array Partition I
LeetCode Distribute Candies
LeetCode Reshape the Matrix
LeetCode 572. Subtree of Another Tree
Copyright © 2011-2022 走看看