章节大纲

  • 在此任务中,我们将了解 MD5 算法的一些性质。这些性质对于我们在此实验中完成其他任务很重要。MD5是一个非常复杂的算法,但是从高层次来看,它并不是那么复杂。如下图所示, MD5 将输入数据划分为 64 个字节的块,然后在这些块上迭代计算哈希。MD5 算法的核心是压缩函数,该函数需要两个输入,即一个 64 字节的数据块和上一次迭代的结果。压缩函数产生一个 128 位的 IHV ,代表 “中间哈希值 (Intermediate Hash Value)”,然后将此输出馈入下一个迭代。如果当前迭代是最后一次,则 IHV 将是最终的哈希值。第一次迭代的 IHV 输入(IHV0)是固定值。

     
     

    基于 MD5 的工作方式,我们可以看出 MD5 有下列性质:给定两个输入 M 和 N,如果 MD5(M) = MD5(N),即 M 和 N 的 MD5 哈希是相同的,那么对于任意的输入 T,  MD5(M | T) = MD5(N | T), 这里 | 表示连接。

    也就是说,如果输入 M 和 N 有相同的哈希值,那么它们在添加相同的后缀 T 后哈希值仍然相同。这个性质不仅对 MD5 哈希算法成立,也对许多其他哈希算法成立。你在本任务中的工作是要设计一个实验来说明这个性质对 MD5 成立。

    你可以使用 cat 命令来将两个文件(无论是二进制文件还是文本文件)连接成一个。下面的命令将 file1 和 file2 的内容连接起来,将结果放到 file3 里。
    $ cat file1 file2 > file3