真正的答案是:视情况而定
有几个因素需要考虑,最明显的是:运行这些算法的 CPU 和算法的实现。
例如,我和我的朋友都运行完全相同的 openssl 版本,但使用不同的 Intel Core i7 cpu 得到的结果略有不同。
2021 年更新在 Ryzen 9 3900x 上运行 openssl speed sha1 md5:Sha1 现在比 md5 快 2-3 倍,并且随着数据大小的增加,差异也会增加
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
md5 171084.26k 373867.24k 660204.56k 783808.17k 840138.75k 843743.23k
sha1 309769.46k 772013.89k 1523885.48k 2017251.67k 2226836.82k 2251024.61k
结束更新
我使用 Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz 进行的测试
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md5 64257.97k 187370.26k 406435.07k 576544.43k 649827.67k
sha1 73225.75k 202701.20k 432679.68k 601140.57k 679900.50k
还有他的 Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md5 51859.12k 156255.78k 350252.00k 513141.73k 590701.52k
sha1 56492.56k 156300.76k 328688.76k 452450.92k 508625.68k
我们都在运行 ArchLinux 官方软件包中的 OpenSSL 1.0.1j 2014 年 10 月 15 日完全相同的二进制文件。
我对此的看法是,随着 sha1 增加的安全性,cpu 设计者更有可能提高 sha1 的速度,并且更多的程序员将致力于算法的优化而不是 md5sum。
我猜想有一天 md5 将不再被使用,因为它似乎比 sha1 没有优势。我还在真实文件上测试了一些情况,两种情况下的结果总是相同的(可能受到磁盘 I/O 的限制)。
4.6GB 大文件的 md5sum 与同一文件的 sha1sum 所用时间完全相同,许多小文件(同一目录中的 488 个)也是如此。我进行了十几次测试,它们始终得到相同的结果。
--
进一步调查这将是非常有趣的。我想周围有一些专家可以提供一个可靠的答案来解释为什么 sha1 在较新的处理器上比 md5 更快。