有很多MD5 JavaScript实现。 有人知道哪一个是最先进的,修复最多的,最快的吗?

我需要它来做这个工具。


当前回答

js-md5支持UTF-8字符串,数组,ArrayBuffer, AMD....

和快速。jsperf

其他回答

我找到了许多关于这个主题的文章。 他们都建议约瑟夫·迈耶斯实施。

在某些测试中,请参阅:http://jsperf.com/md5-shootout

在我对终极速度的追求中,我看了这段代码,我看到它可以改进。所以我基于Joseph Meyers代码创建了一个新的JS脚本。

参见改进的约瑟夫迈耶斯代码

您还可以检查我的md5实现。应该是大约。和上面其他贴的一样。不幸的是,性能受到内环的限制,不可能进一步优化。

也许这个包是有用的 https://www.npmjs.com/package/pure-md5

console.time('latin'); 常量拉丁语 = MD5('你好'); console.timeEnd('latin'); console.log('Привет: ', md5('Привет')); console.log('嘿: ', md5('嘿')); <script src=“https://unpkg.com/pure-md5@latest/lib/index.js”></script>

目前最快的md5实现(基于Joseph Myers的代码):

https://github.com/iReal/FastMD5

jsPerf比较:http://jsperf.com/md5-shootout/63

这是另一个比我的快25%的 前一个 : D

function MD5(r) { var o, e, n, f = [ -680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551 ], t = [ o = 1732584193, e = 4023233417, ~o, ~e ], c = [], a = unescape(encodeURI(r)) + "\u0080", d = a.length; for (r = --d / 4 + 2 | 15, c[--r] = 8 * d; ~d; ) c[d >> 2] |= a.charCodeAt(d) << 8 * d--; for (i = a = 0; i < r; i += 16) { for (d = t; 64 > a; d = [ n = d[3], o + ((n = d[0] + [ o & e | ~o & n, n & o | ~n & e, o ^ e ^ n, e ^ (o | ~n) ][d = a >> 4] + f[a] + ~~c[i | 15 & [ a, 5 * a + 1, 3 * a + 5, 7 * a ][d]]) << (d = [ 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21 ][4 * d + a++ % 4]) | n >>> -d), o, e ]) o = 0 | d[1], e = d[2]; for (a = 4; a; ) t[--a] += d[a]; } for (r = ""; 32 > a; ) r += (t[a >> 3] >> 4 * (1 ^ a++) & 15).toString(16); return r; } <!DOCTYPE html> <html> <body onload="md5.value=MD5(a.value);"> <form oninput="md5.value=MD5(a.value)">Enter String: <input type="string" id="a" name="a" value="https://www.zibri.org"></br></br>MD5:<output id="md5" name="md5" for="a"></output> </form> </body> </html>