代码之家  ›  专栏  ›  技术社区  ›  pclem12

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

  •  5
  • pclem12  · 技术社区  · 14 年前

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

    这是为了安全还是只是个记号笔?

    2 回复  |  直到 14 年前
        1
  •  7
  •   Thomas Pornin    14 年前

    填充过程不能产生冲突。如果你有消息 它被塞进 下午 ,长度是512的倍数。现在想象一下 下午 作为信息 就其本身而言,即填充位已经添加,就好像它们是消息的一部分。如果填充保持不变 按照你的建议,保持不变 将生成相同的哈希值,即使它们是不同的消息。那将是一次碰撞,也被称为“根本不好”。

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

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

        2
  •  1
  •   Gangadhar    14 年前

    消息被填充,以便长度可以被512整除。请记住,它是正在计算哈希值的消息的位表示形式。而且由于消息需要被分成512位的块,额外的位作为填充添加。检查 Algorithm 有关详细信息,请访问wiki上的部分。