是否有关于MD5如何依赖文件大小的效率分析。它实际上取决于文件大小或文件内容。因此,对于我有500mb文件的所有空格和一个带有电影的500mb文件,md5会花费相同的时间来生成哈希码吗?
答案 0 :(得分:8)
根据定义,任何hashsum都是你所求和的字节数的总和。您必须至少通过流读取文件 - 更多字节需要更长的时间来遍历。但是,我会说(一般来说)瓶颈确实会读取文件,无论你想用它做什么 - 一旦你阅读它就不会散列它。
编辑:我有点误读了这个问题。散列两个相同大小的文件需要花费相同的时间。 500mb的空间是500mb的字节,代表“空间”。这仍然是每字节8位数据,与任何其他文件相同。答案 1 :(得分:3)
因为MD5主要由XOR,AND,OR和NOT操作组成,所以速度不依赖于包含1或0的给定位。
来自http://en.wikipedia.org/wiki/MD5:
F有四种可能的功能;每轮使用不同的一个:
答案 2 :(得分:2)
所有哈希值(包括MD5)都没有依赖于内容的性能。
答案 3 :(得分: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算法中使用的位操作。
答案 4 :(得分:0)
该操作包含相同的基本操作(XOR,AND,NOT等)。在我所知道的所有处理器上,无论参数是什么,这些操作都将花费相同的时间。因此,MD5处理输入所需的时间应该与输入中的512位块的数量呈线性关系。