在MD5中附加消息

时间:2014-01-04 04:57:13

标签: md5

我试图了解MD5哈希算法是如何工作的,并且已经阅读了Wikipedia article

在一条消息附加消息后,消息的长度(以位为单位)与448 mod 512一致,一个应该是

append length mod (2 pow 64) to message

根据我的理解,这意味着附加64位代表消息长度的消息。我对如何做到这一点感到有点困惑。

  1. 我的第一个问题是:这是原始未播放消息的长度,或者是在将其附加1后跟零后得到的长度吗?

  2. 我的第二个问题是:长度是以字节为单位的长度吗?也就是说,如果我的消息是一个字节,我会将消息附加到63 0然后是1.或者如果消息是10个字节,那么我会将消息附加到60 0和1010。

1 个答案:

答案 0 :(得分:3)

  1. 未填充邮件的长度。来自MD5 RFC,3.2:

      

    b的64位表示(消息之前的消息长度)   填充位被添加)附加到前一个的结果   步。在不太可能的情况下,b大于2 ^ 64,那么只有   使用b的低位64位。 (这些位附加为两个   首先按照32位字和附加的低位字   以前的惯例。)

  2. 长度以位为单位。参见MD5 RFC,3.1:

      

    消息被“填充”(扩展),以便其长度(以位为单位)   全等到448,模512.也就是说,消息是扩展的   它只是64位,是512位长的倍数。   即使消息的长度为,也始终执行填充   已经与448一致,模512。

  3. MD5规范比维基百科的文章精确得多。如果您想要实现级别的详细信息,我总是建议您阅读Wiki页面上的规范。

      

    如果我的消息是一个字节,我会将消息附加到63 0,然后是1.或者如果消息是10个字节,那么我会将消息附加到60 0和1010。

    不完全。不要忘记在填充开始时始终附加的必需位值“1”。来自规范:

      

    填充如下执行:将单个“1”位附加到      消息,然后附加“0”位,以便以位为单位的长度      填充的消息变为全等448,模512.总之,在      附加至少一位且最多512位。

    这个reference C implementation(免责声明:我自己的)MD5可能会有所帮助,它的编写是为了让人很容易理解。