2个不同输入的哈希值可以相同吗?

Sha*_*jan 3 hash cryptography

根据我的理解,散列是一个为任意长度的输入生成唯一的固定长度(假设为 64 位)输出的过程。(如有错误请指正)

因此,如果我获取哈希函数可以生成的所有 (x) 个可能的 64 位哈希值,并在其末尾附加 0 或 1。我得到一个大小为 2x 的列表(其中每个哈希值的长度为 65 位)。

如果我将所有 2x 组合作为同一哈希函数的输入,它如何为所有输入生成唯一的哈希值?

jwi*_*mar 5

你是对的。这称为哈希冲突,这是真实存在的。这不是一个大问题的原因是散列的数量非常大,以至于这些类型的冲突很少见。不过,您的 64 位示例有点不切实际。256 位或 512 位是更可能的情况。(即使是 128 也不再被认为足够强大。)并且这种情况下的哈希范围是如此之大,以至于找到创建哈希冲突的输入非常困难。


kel*_*aka 5

根据鸽巢原理,哈希冲突是不可避免的。也就是说,不可避免地要找到两个不同的消息,m1 != m2使得它们的哈希值相等H(m1) = H(m2)

因此,无法为输入生成唯一的哈希值。发生碰撞的概率非常非常小(可以忽略不计)。甚至,在 2 64 个可能值内,具有 64 位输出的哈希函数也可能发生冲突。

最好使用SHA3 -512 或 BLAKE2b等哈希函数,如果您确实希望它们唯一,请将它们与您之前生成的哈希值进行比较。如果你发现碰撞,你就会出名。

  • SHA3​​ 系列可以生成 224、256、384 或 512 位输出。