【问题标题】:How Is MD5 generation dependent on file size?MD5 生成如何取决于文件大小?
【发布时间】:2009-08-10 17:52:44
【问题描述】:

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

【问题讨论】:

    标签: encryption cryptography md5


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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


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

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





      分别表示XOR、AND、OR和NOT运算。

      【讨论】:

      • 如果稍后编辑页面,这些图像可能会消失 - 您可能希望将它们镜像到某个地方...
      • @bdonlan 将图片添加到 stack.imgur 中,说明引用了原始来源
      【解决方案3】:

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

      【讨论】:

      • 计算机如何在与长字节数组完全相同的时间内遍历短字节数组?
      • 呃,我明白你现在在说什么了。一个字节是空格,另一个字节不是 - 大小相同,内容不同。没关系:)
      【解决方案4】:

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

      # 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 算法中使用的位操作的答案,这是预期的。

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多