MD5哈希算法中的填充问题

12

我需要理解MD5哈希算法。我正在阅读一份文件,其中写道:

“消息被“填充”(扩展),使其长度(以位为单位)模512余448。也就是说,消息被扩展了,只有64位不足以成为512位的倍数。即使消息的长度已经模512余448,也总是进行填充。”

我需要理解这在简单术语中意味着什么,特别是448模512。MODULO这个词是问题所在。请给我提供简单的例子。有趣的是,这是MD5哈希的第一步! :)

谢谢

2个回答

12

取模或者是 mod,是一个函数,用于告诉你两个数字相除时的余数。

例如:

5 取模 3:

5/3 = 1,余数为 2。所以 5 mod 3 是 2。

10 取模 16 = 10,因为不能再除尽16。

15 取模 5 = 0,因为15可以被5整除,正好3次,15 是 5 的倍数。

在学校里,你可能会学到这叫做“余数”或者“剩余数”,而 mod 只是一种花哨的说法。

这里所说的是,在使用 MD5 算法时,首先要做的事情之一就是填充消息内容,使其足够长。对于 MD5,您的消息长度必须为 n 位,其中 n= (512*z)+448,z 是任意数字。

例如,如果您有一个长度为 1472 位的文件,则可以将其用作 MD5 哈希,因为 1472 取模 512 = 448。如果文件长度为 1400 位,则需要填充额外的 72 位才能运行其余的 MD5 算法。


2

模数是除法的余数。例如:

512 mod 448 = 64
448 mod 512 = 448

512 mod 448的另一种方法是将它们相除得到512/448 = 1.142..

然后你需要用小数点前的结果减去512并乘以448:

512 - 448*1 == 64 That's your modulus result.

你需要知道的是,448比512的倍数短64位。

但如果它在448和512之间呢?

通常我们需要用x(模数的结果)减去448。

 447 mod 512 = 447; 448 - 447 = 1; (all good, 1 zero to pad)

 449 mod 512 = 1; 448 - 449 = -1 ???

因此,解决这个问题的方法是取512的更高倍数,但仍要短于64;

512*2 - 64 = 960
449 mod 512 = 1; 960 - 449 = 511;

这是因为我们需要在后面添加64位原始消息,而全长必须是512的倍数。
960 - 449 = 511; 
511 + 449 + 64 = 1024; 
1024 is multiple of 512; 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接