我需要理解MD5哈希算法。我正在阅读一份文件,其中写道:
“消息被“填充”(扩展),使其长度(以位为单位)模512余448。也就是说,消息被扩展了,只有64位不足以成为512位的倍数。即使消息的长度已经模512余448,也总是进行填充。”
我需要理解这在简单术语中意味着什么,特别是448模512。MODULO这个词是问题所在。请给我提供简单的例子。有趣的是,这是MD5哈希的第一步! :)
谢谢
取模或者是 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 算法。
模数是除法的余数。例如:
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;
960 - 449 = 511;
511 + 449 + 64 = 1024;
1024 is multiple of 512;