填充过程不得产生冲突.如果你有一个消息,米就被填充到下午,其中有512的长度多现在想象一下,下午的消息M"本身,即已加入,好像他们是消息的一部分填充比特.如果填充只是保持m'不变,如你所说,那么m和m'将产生相同的散列值,即使它们是不同的消息.这将是一次碰撞,也被称为"根本不好".
一般来说,填充过程必须能够明确地删除它:您必须能够查看填充的消息,并毫不犹豫地决定哪些位来自消息本身,哪些位被添加为填充.散列函数过程中的任何内容实际上都不会删除填充,但它必须在概念上可行.如果长度倍数为512的消息通过完全不添加任何位来"填充",则在数学上是不可能的.
以上是所有散列函数的通用.MD5和一般系列的一些功能(包括SHA-1,SHA-256 ......),使用Merkle-Damgård构造,还需要在填充中编码输入数据长度(这是实现一些必要条件)安全证明).在MD5中,长度编码为64位数字.对于'1'位,任何消息至少有65个填充位(最多为511).