MD5哈希算法中的填充

时间:2012-03-14 09:28:43

标签: hash md5

我需要了解Md5哈希算法。我正在阅读文件并说明

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

我需要理解这简单来说意味着什么,特别是448模512. MODULO这个词是个问题。我会很感激这个简单的例子。有趣的是,这是MD5哈希的第一步! :)

由于

2 个答案:

答案 0 :(得分:10)

Modulo或mod,是一个函数,当两个数字相互分开时,它会告诉你余数。

例如:

5模3:

5/3 = 1,剩余2个。所以5 mod 3是2。

10模16 = 10,因为16不能。

15模5 = 0,因为15进5正好3次。 15是5的倍数。

回到学校,你会把它当作“剩余”或“遗留下来”学习,模数只是一种奇特的说法。

这里所说的是,当你使用MD5时,首先发生的事情之一是你填写你的信息足够长。在MD5的情况下,您的消息必须是n位,其中n =(512 * z)+448,z是任意数字。

例如,如果你有一个1472位长的文件,那么你就可以将它用作MD5哈希,因为1472模512 = 448.如果文件是1400位长,那么你需要在运行MD5算法的其余部分之前,要额外填充72位。

答案 1 :(得分:0)

模数是除法的余数。例如

512 mod 448 = 64
448 mod 512 = 448

512 mod 448的另一种方法是将它们分成512/448 = 1.142 ..

然后在点乘以448之前从结果编号中减去512:

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;