MD5 生成如何取决于文件大小?
有没有关于MD5如何依赖于文件大小的效率分析? 它实际上取决于文件大小或文件内容吗? 那么,对于我有一个 500mb 的文件(全是空格)和一个 500mb 的文件(其中有电影),md5 会花费相同的时间来生成哈希码吗?
Is there any efficiency analysis of how MD5 dependent on the file size. Is it actually dependent of file size or content of the file. So for i have 500mb file with all blank spaces and a 500mb file with movie in it, would md5 take same time to generate the the hash code?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
根据定义,任何哈希和都是您所求和的字节的数学总和。 您至少必须通过流读取文件 - 更多字节需要更长的时间来遍历。 然而,我想说(一般来说)瓶颈确实是读取文件,无论你想用它做什么 - 一旦你读了它就不会对其进行散列。
编辑:我有点误读了这个问题。 散列两个相同大小的文件将花费完全相同的时间。 500mb 的空格是代表“空格”的 500mb 字节。 这仍然是每字节 8 位数据,与任何其他文件相同。
Any hashsum is, by definition, a mathematical sum of the bytes of what you're summing. You have to read the file through a stream at the very least - more bytes take longer to traverse. However, I'd say (generally speaking) the bottleneck will indeed be reading the file, no matter what you're trying to with it - not hashing it once you've read it.
Edit: I kinda misread the question. It will take exactly the same amount of time to hash two files of equal size. 500mb of spaces is 500mb of bytes which represent "space". That's still 8 bits of data per byte, same as any other file.
这是一个快速的实证测试。
根据之前提到 MD5 算法中使用的位操作的答案,这是预期的。
Here's a quick empirical test.
This is expected as per previous answers alluding to the bit manipulations used in the MD5 algorithm.
由于 MD5 主要由 XOR、AND、OR 和 NOT 运算组成,因此速度不依赖于包含 1 或 0 的给定位。
来自 http://en.wikipedia.org/wiki/MD5:
有四种可能的功能 F; 每轮使用不同的:
分别表示 XOR、AND、OR 和 NOT 运算。
Because MD5 consists mostly of XOR, AND, OR and NOT operations, the speed is not dependent on a given bit containing a 1 or a 0.
From http://en.wikipedia.org/wiki/MD5:
There are four possible functions F; a different one is used in each round:
denote the XOR, AND, OR and NOT operations respectively.
一般而言,所有散列(包括 MD5)的性能都不依赖于内容。
All hashes in general, and including MD5, do not have performance dependent upon the content.
MD5 与大多数其他哈希算法一样,在块上运行。 对于输入的每个 512 位块,它执行相同的操作,并将输出用作下一个块的输入的一部分。
该运算由相同的基本运算组成(XOR、AND、NOT 等)。 在我知道的所有处理器上,无论参数是什么,这些操作都将花费相同的时间。 因此,MD5 处理输入所花费的时间应该与输入中 512 位块的数量成线性关系。
MD5, like most other hash algorithms, operates on blocks. For each 512-bit block of the input it performs the same operation and uses the output as part of the input for the next block.
The operation consists of the same basic operations (XOR, AND, NOT etc.). On all processors that I know, these operations will take the same time, no matter what the arguments are. So the time MD5 should take to process input should be linear in the number of 512-bit blocks in the input.