4

是否有任何关于 MD5 如何依赖文件大小的效率分析。它实际上取决于文件大小或文件的内容。因此,对于我有一个包含所有空格的 500mb 文件和一个包含电影的 500mb 文件,md5 需要相同的时间来生成哈希码吗?

4

5 回答 5

8

根据定义,任何哈希和都是您要求和的字节的数学总和。您至少必须通过流读取文件 - 更多字节需要更长的时间来遍历。但是,我想说(一般来说)瓶颈确实是读取文件,无论你试图用它做什么 - 一旦你阅读它就不会散列它。

编辑:我有点误读了这个问题。散列两个大小相等的文件将花费完全相同的时间。500mb 的空间是代表“空间”的 500mb 字节。这仍然是每字节 8 位数据,与任何其他文件相同。

于 2009-08-10T17:55:15.900 回答
3

因为 MD5 主要由 XOR、AND、OR 和 NOT 操作组成,所以速度不依赖于包含 1 或 0 的给定位。


来自http://en.wikipedia.org/wiki/MD5

有四个可能的函数 F;每轮使用一个不同的:

资料来源:http://upload.wikimedia.org/math/c/8/8/c887dfd80049b04ba54abfed7a04bda2.png
资料来源:http://upload.wikimedia.org/math/e/f/9/ef971bcd2ed5aeb59d6de12bcec32491.png
来源:http://upload.wikimedia.org/math/6/b/2/6b2e2f185f30889f1e37afe9ce29a096.png
资料来源:http://upload.wikimedia.org/math/c/8/8/c887dfd80049b04ba54abfed7a04bda2.png

来源:http://upload.wikimedia.org/math/d/9/6/d96277da48b2e8f86c7268f480a9e87c.png分别表示 XOR、AND、OR 和 NOT 操作。

于 2009-08-10T18:03:55.350 回答
2

一般来说,所有散列,包括 MD5,都没有依赖于内容的性能。

于 2009-08-10T17:56:42.713 回答
2

这是一个快速的经验测试。

# dd if=/dev/urandom of=randomfile bs=1024 count=512000
# dd if=/dev/zero of=zerofile bs=1024 count=512000

# time md5 randomfile 
MD5 (randomfile) = bb318fa1561b17e30d03b12e803262e4

real    0m2.753s
user    0m1.567s
sys 0m1.157s

# time md5 zerofile
MD5 (zerofile) = d8b61b2c0025919d5321461045c8226f

real    0m2.761s
user    0m1.567s
sys 0m1.168s

根据先前提到 MD5 算法中使用的位操作的答案,这是预期的。

于 2009-08-10T18:07:05.797 回答
0

MD5 与大多数其他哈希算法一样,对块进行操作。对于输入的每个 512 位块,它执行相同的操作并将输出用作下一个块的输入的一部分。

该操作由相同的基本操作(XOR、AND、NOT 等)组成。在我知道的所有处理器上,无论参数是什么,这些操作都将花费相同的时间。因此 MD5 处理输入所花费的时间应该与输入中 512 位块的数量成线性关系。

于 2009-08-10T21:35:29.107 回答