有很多MD5 JavaScript实现。 有人知道哪一个是最先进的,修复最多的,最快的吗?
我需要它来做这个工具。
有很多MD5 JavaScript实现。 有人知道哪一个是最先进的,修复最多的,最快的吗?
我需要它来做这个工具。
当前回答
您还可以检查我的md5实现。应该是大约。和上面其他贴的一样。不幸的是,性能受到内环的限制,不可能进一步优化。
其他回答
在这种情况下,我建议您使用CryptoJS。
基本上,CryptoJS是一个使用最佳实践和模式在JavaScript中实现的标准和安全加密算法的不断增长的集合。它们速度快,界面一致且简单。
因此,如果你想计算密码字符串的MD5哈希值,那么按照以下步骤进行:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/core.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/md5.js"></script>
<script>
var passhash = CryptoJS.MD5(password).toString();
$.post(
'includes/login.php',
{ user: username, pass: passhash },
onLogin,
'json' );
</script>
因此,这个脚本将把密码字符串的散列发布到服务器。
有关其他哈希计算算法的进一步信息和支持,您可以访问:
http://code.google.com/p/crypto-js/
Node.js有内置的支持
const crypto = require('crypto')
crypto.createHash('md5').update('hello world').digest('hex')
上面的代码段为字符串hello world计算MD5十六进制字符串
这种解决方案的优点是不需要安装额外的库。
我认为内置解决方案应该是最快的。如果不是,我们应该为Node.js项目创建issue/PR。
js-md5支持UTF-8字符串,数组,ArrayBuffer, AMD....
和快速。jsperf
我编写了测试来比较几种JavaScript哈希实现,包括这里提到的大多数MD5实现。 要运行测试,请访问http://brillout.github.io/test-javascript-hash-implementations/并稍等片刻。
似乎R. Hill的答案的YaMD5实现是最快的。
这是另一个比我的快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>