JavaScript hashing speed comparison: MD5 versus SHA-256(Daniel Lemire, 2025-01-11)通过 JavaScript 基准测试对比了 MD5 与 SHA-256 在 Node.js 23 和 Bun 运行时下的哈希性能,核心结论颠覆了“MD5 更快”的传统认知:
- 测试背景与方法:使用 1GB 随机 Uint8Array 数据,在 ARM(Apple M2、Graviton 4)和 x86(Intel Ice Lake)系统上,分别对
md5Hash和sha256Hash进行基准测试,底层实际调用 OpenSSL 实现。 - 关键性能数据:在现代 CPU 上 SHA-256 显著快于 MD5。例如在 Apple M2(Node.js)上,SHA-256 约 2.6 GB/s,MD5 仅约 0.6–0.7 GB/s;在 Intel Ice Lake 上 SHA-256 也达到 1.2 GB/s,优于或持平 MD5。
- 原因分析:SHA-256 虽然在算法设计上更复杂,但现代处理器(ARMv8、x86 等)普遍带有 硬件密码学扩展指令(如 Intel SHA-NI),对其进行了加速;而老旧且已被破解的 MD5 并未获得类似优化。
- 最终建议:不应再使用 MD5。它既在安全性上已被彻底攻破(存在碰撞攻击),在实际速度上也失去了优势,开发者应默认选择 SHA-256 或更先进的算法(如 BLAKE3,若可用)。
这是采用的 JavaScript 做的基准测试,但是结论说明的是通用硬件现象:现代 CPU(ARM/x86)有 SHA-256 硬件指令加速,而 MD5 无优化,任何语言调底层实现都如此。
因此,在现代处理器上,SHA256 性能大幅优于 MD5 的结论在所有语言上都是通用的。