我需要理解MD5散列算法。我在读一个文档和它指出填充MD5散列算法
“的消息是‘填补结束’(扩展),使得它的长度(位)是 全等448,模512即,该消息被扩展,以便 它只有64位是512位长的倍数 即使消息的长度为 已经与448相等,模512,也总是执行填充。“
我需要理解这是什么意思,在简单的术语,特别是448模512.单词MODULO是问题。请给我一些简单的例子。有趣的是,这是MD5哈希的第一步! :)
感谢
我需要理解MD5散列算法。我在读一个文档和它指出填充MD5散列算法
“的消息是‘填补结束’(扩展),使得它的长度(位)是 全等448,模512即,该消息被扩展,以便 它只有64位是512位长的倍数 即使消息的长度为 已经与448相等,模512,也总是执行填充。“
我需要理解这是什么意思,在简单的术语,特别是448模512.单词MODULO是问题。请给我一些简单的例子。有趣的是,这是MD5哈希的第一步! :)
感谢
模(MOD),是导致告诉你的余两个数字之间互相分割的功能。
例如:
5模3:
5/3 = 1,2的余数。所以5 mod 3是2.
10 modulo 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位。
模数是余数的划分。在示例
512 mod 448 = 64
448 mod 512 = 448
512 MOD 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;