如果md5消息已经是正确的长度,填充md5消息的目的是什么?

时间:2010-09-13 14:52:06

标签: hash md5 padding

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

这是安全还是标记?

2 个答案:

答案 0 :(得分:7)

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

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

以上是所有哈希函数的通用。 MD5和相同通用族的一些函数(包括SHA-1,SHA-256 ......),使用Merkle-Damgård construction,还需要在填充中编码输入数据长度(这是实现的必要条件)一些安全证明)。在MD5中,长度编码为64位数字。对于'1'位,任何消息至少有65个填充位(最多511个)。

答案 1 :(得分:1)

填充消息,以便长度可被512整除。请记住,它是正在计算散列的消息的位表示。由于消息需要分成512位块,因此添加额外的位作为填充。有关详细信息,请查看Wiki上的Algorithm部分。