以MD5形式追加消息

  • 本文关键字:追加 消息 MD5 md5
  • 更新时间 :
  • 英文 :


我正在努力了解MD5哈希算法是如何工作的,并且一直在阅读维基百科上关于它的文章。

在附加消息使得消息的长度(以比特为单位)与448 mod 512一致之后,假设

append length mod (2 pow 64) to message

据我所知,这意味着在消息中添加64位,表示消息的长度。我对如何做到这一点有点困惑。

  1. 我的第一个问题是:这是原始未挂起消息的长度,还是用1加0后的长度?

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

  1. 未添加消息的长度。来自MD5 RFC,3.2:

    b的64位表示(添加了填充位)附加到上一个的结果步在不太可能的情况下,b大于2^64,则仅使用b的低阶64位。(这些位被附加为两个根据以前的惯例。)

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

    消息被"填充"(扩展),因此其长度(以位为单位)为等于448,模512。也就是说,消息被扩展为它只差64位,而不是512位长的倍数。即使消息长度为已经等于448的模512。

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

如果我的消息是一个字节,我会在消息后面加63个0,然后加1吗。或者,如果消息是10个字节,那么我会用60个0和1010来附加消息。

不完全是。不要忘记必须的位值"1",它总是附加在填充的开头。来自规格:

填充执行如下:将单个"1"位附加到消息,然后附加"0"位,以便填充的消息变得与448模512一致。总之,在附加了至少一个比特和最多512个比特。

MD5的这个参考C实现(免责声明:我自己的)可能会有所帮助,它的编写希望它易于遵循。

最新更新