哈希算法将输入数据转换为固定大小的字符串,称为哈希值或摘要。这些算法是单向函数,这意味着无法从哈希中检索原始数据,这使得它们对于数据完整性、密码存储和数字签名非常有用。 MD5 和 SHA-256 是两种这样的哈希算法,它们在安全性、速度和应用方面存在显着差异。 MD5 较旧,由于其结构更简单,通常被认为散列速度更快。 MD5 现在被认为是密码学上被破坏的。 SHA-256 以其 256 位哈希输出提供更高级别的安全性。
但MD5真的更快吗?我决定编写一个小型 JavaScript 程序,使用 MD5 和 SHA-256 对大型输入进行哈希处理。我的 JavaScript 代码定义了两个散列函数: md5Hash使用 MD5 算法生成 128 位散列,而sha256Hash使用 SHA-256 来提高安全性。然后使用createRandomUint8Array创建的大型 1GB 数组对这些哈希函数进行基准测试。
函数md5Hash (消息) { 返回加密货币。创建哈希( ' md5 ' ) 。更新(消息) 。摘要( '十六进制' ) ; } 函数sha256Hash (消息) { 返回加密货币。创建哈希( ' sha256 ' ) 。更新(消息) 。摘要( '十六进制' ) ; } const largeString = createRandomUint8Array ( 1000000000 ) ; // 1GB 字符串 bench ( ' MD5 哈希' , ( ) = > { md5Hash (大字符串) ; } ) ; 工作台( ' SHA-256 哈希' , ( ) = > { sha256Hash (大字符串) ; } ) ;
我在测试中使用最新版本的 Bun 运行时和 Node.js 23。我们发现,在 Apple M2 系统上,Bun 在 MD5 基准测试中稍快一些,但 Node.js 和 Bun 在其他方面的速度相同。
MD5 | SHA-256 | ||
苹果M2系统 | 包子1.31 | 0.7GB/秒 | 2.6GB/秒 |
苹果M2系统 | Node.js 23 | 0.6GB/秒 | 2.6GB/秒 |
英特尔Ice Lake Linux系统 | 包子1.31 | 0.7GB/秒 | 1.2GB/秒 |
英特尔Ice Lake Linux系统 | Node.js 23 | 0.7GB/秒 | 1.2GB/秒 |
我的结果表明您可能不应该使用 MD5。 MD5 比 SHA-256 慢且安全性较差。
原文: https://lemire.me/blog/2025/01/11/javascript-hashing-speed-comparison-md5-versus-sha-256/