Hash 如果md5消息的长度已经合适,那么填充它的目的是什么?

Hash 如果md5消息的长度已经合适,那么填充它的目的是什么?,hash,md5,padding,Hash,Md5,Padding,我知道md5中填充的过程,但是在已经是正确长度的消息中添加1和几个0的目的是什么 这是为了安全还是仅仅是一个标记?消息被填充,以便长度可以被512整除。请记住,它是为其计算哈希的消息的位表示形式。由于消息需要被分成512位的块,额外的位被添加作为填充。有关更多详细信息,请查看Wiki上的部分。填充过程不得创建冲突。如果您有一条消息m,它将填充到pm中,pm的长度是512的倍数。现在将pm想象为消息m’本身,即已添加的填充位,好像它们是消息的一部分。如果填充只是保持m'不变,正如您所建议的,那么m

我知道md5中填充的过程,但是在已经是正确长度的消息中添加1和几个0的目的是什么


这是为了安全还是仅仅是一个标记?

消息被填充,以便长度可以被512整除。请记住,它是为其计算哈希的消息的位表示形式。由于消息需要被分成512位的块,额外的位被添加作为填充。有关更多详细信息,请查看Wiki上的部分。

填充过程不得创建冲突。如果您有一条消息m,它将填充到pm中,pm的长度是512的倍数。现在将pm想象为消息m’本身,即已添加的填充位,好像它们是消息的一部分。如果填充只是保持m'不变,正如您所建议的,那么m和m'将产生相同的哈希值,即使它们是不同的消息。这将是一次碰撞,也被称为“根本不好”

一般来说,填充过程必须能够被明确地删除:您必须能够查看填充消息,并毫不犹豫地决定哪些位来自消息本身,哪些位被添加为填充。hash函数过程中没有任何内容实际删除填充,但它必须在概念上是可行的。如果长度为512倍的消息通过不添加任何位来“填充”,那么这在数学上是不可能的


以上是所有哈希函数的通用函数。MD5和同一通用系列的一些函数(包括SHA-1、SHA-256…),使用,也需要在填充中编码输入数据长度(这对于实现某些安全性证明是必要的)。在MD5中,长度编码为64位数字。对于“1”位,任何消息至少有65个填充位(最多511个)。

是的,我知道这一点,但如果它已经是512-64位长了呢?您将消息长度添加到64中,现在它可以被512整除。但是,不要使用这个,你仍然需要在中间垫一个额外的512位。当它已经可以被512整除而没有填充时,填充的目的是什么?如果我理解你说的是正确的,那么你要说的是,如果消息是(512-64)位长的,为什么要添加任何填充?接下来的64位将是以64位整数表示的消息长度,那么为什么要添加填充呢。我理解你的问题对吗?如果是这样的话,你是指当你说额外的512位被添加在中间吗?抱歉没有快速响应…忙了,但是是的,这就是我想要的,Thomas Pornin回答说,非常感谢。这就是我一直在寻找的答案for@Thomas你能告诉我为什么第一个填充位是1而不是全零吗?第一位必须为1有什么特殊原因吗?