MD5 与 SHA-256 哈希算法速度对比(JavaScript 版)

哈希算法将输入数据转换为固定长度的字符串,称为哈希值或摘要

这些算法是单向函数,这意味着无法从哈希值中还原出原始数据,因此它们在数据完整性、密码存储和数字签名方面非常有用。MD5SHA-256 是两种哈希算法,它们在安全性、速度和应用方面存在显著差异。MD5 出现较早,由于其结构更简单,通常被认为哈希速度更快。但现在 MD5 已被认为在密码学上已被破解,SHA-256 提供 256 位哈希输出,因此,安全性相对更高。

但 MD5 真的更快吗?

我决定编写一个简单的 JavaScript 程序,分别使用 MD5 和 SHA-256 对一个大型输入进行哈希处理。我的 JavaScript 代码定义了两个哈希函数:md5 Hash 使用 MD5 算法生成 128 位哈希值,而 sha256 Hash 使用 SHA-256 算法,安全性更高。然后,我使用一个由 createRandomUint8Array 创建的 1GB 大型数组来测试这些哈希函数的性能。

测试代码如下:

function md5Hash(message) {
    return crypto.createHash('md5').update(message).digest('hex');
}

function sha256Hash(message) {
    return crypto.createHash('sha256').update(message).digest('hex');
}

const largeString = createRandomUint8Array(1000000000); // 1GB string

bench('MD5 Hash', () => {
    md5Hash(largeString);
});

bench('SHA-256 Hash', () => {
    sha256Hash(largeString);
});

在本次测试中,使用了最新版本的 Bun Runtime 和 Node.js 23。我发现,在 ARM 系统(Apple M2 或 Amazon Graviton 4)上,Bun 在 MD5 基准测试中速度略快,但 Node.js 和 Bun 在其他方面速度完全相同。

  MD5SHA-256
Apple M2 systemBun 1.310.7 GB/s2.6 GB/s
Apple M2 systemNode.js 230.6 GB/s2.6 GB/s
Intel Ice Lake Linux systemBun 1.310.7 GB/s1.2 GB/s
Intel Ice Lake Linux systemNode.js 230.7 GB/s1.2 GB/s
Amazon Graviton 4 Linux systemBun 1.310.6 GB/s1.8 GB/s
Amazon Graviton 4 Linux systemNode.js 230.5 GB/s1.8 GB/s

上述测试结果表明,你可能不应该使用 MD5 哈希算法,尽管 SHA-256 从理论上看成本更高,但 MD5 比 SHA-256 慢,而且安全性也较低。最重要的是,现代处理器通常具有加密扩展功能来加速 SHA-256 算法的效率。

全文完,感谢您的阅读,希望本文对您了解哈希算法的执行效率有一定帮助。

分享
下一篇 无更多文章