是否有任何关于 MD5 如何依赖文件大小的效率分析。它实际上取决于文件大小或文件的内容。因此,对于我有一个包含所有空格的 500mb 文件和一个包含电影的 500mb 文件,md5 需要相同的时间来生成哈希码吗?
问问题
5542 次
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;每轮使用一个不同的:
于 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 回答