【发布时间】:2009-08-10 17:52:44
【问题描述】:
是否有任何关于 MD5 如何依赖文件大小的效率分析。它实际上取决于文件大小或文件的内容。那么对于我有一个包含所有空格的 500mb 文件和一个包含电影的 500mb 文件,md5 是否需要相同的时间来生成哈希码?
【问题讨论】:
标签: encryption cryptography md5
是否有任何关于 MD5 如何依赖文件大小的效率分析。它实际上取决于文件大小或文件的内容。那么对于我有一个包含所有空格的 500mb 文件和一个包含电影的 500mb 文件,md5 是否需要相同的时间来生成哈希码?
【问题讨论】:
标签: encryption cryptography md5
根据定义,任何哈希和都是您要求和的字节的数学总和。您至少必须通过流读取文件 - 更多字节需要更长的时间来遍历。但是,我想说(一般来说)瓶颈确实是读取文件,不管你想用它做什么——一旦你读过它就不要散列它。
编辑:我有点误读了这个问题。散列两个大小相等的文件将花费完全相同的时间。 500mb 的空间是代表“空间”的 500mb 字节。这仍然是每字节 8 位数据,与任何其他文件相同。
【讨论】:
由于 MD5 主要由 XOR、AND、OR 和 NOT 操作组成,因此速度不依赖于包含 1 或 0 的给定位。
来自http://en.wikipedia.org/wiki/MD5:
有四个可能的函数 F;每轮使用不同的:
【讨论】:
一般来说,所有哈希值,包括 MD5,都没有依赖于内容的性能。
【讨论】:
这是一个快速的经验测试。
# 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 算法中使用的位操作的答案,这是预期的。
【讨论】:
MD5 与大多数其他哈希算法一样,对块进行操作。对于输入的每个 512 位块,它执行相同的操作并将输出用作下一个块的输入的一部分。
该操作由相同的基本操作(XOR、AND、NOT 等)组成。在我知道的所有处理器上,无论参数是什么,这些操作都将花费相同的时间。因此 MD5 处理输入所花费的时间应该与输入中 512 位块的数量成线性关系。
【讨论】: