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

时间:2018-11-02 13:43:22

标签: hash cryptography

根据我的理解,散列是将唯一的固定长度(假设为64位)输出生成为ANY长度的输入的过程。 (如果错了,请纠正我)

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

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

2 个答案:

答案 0 :(得分:2)

您是正确的。这称为哈希冲突,这是真实的事情。之所以没什么大不了,是因为散列的数量是如此之大,以至于这类冲突很少见。但是,您的64位示例有些不现实。 256位或512位是更可能的情况。 (甚至不再认为128足够强大。)在这种情况下,哈希的范围是如此之大,以至于很难找到产生哈希冲突的输入。

答案 1 :(得分:1)

通过Pigeonhole principle,哈希冲突是不可避免的。那就是m1!= m2且H(m1)= H(m2)

您不能为输入生成唯一的哈希。发生碰撞的可能性非常小。即使在2 ^ 64个可能的值之内,具有64位输出的哈希函数也可能发生冲突。

最好使用SHA3之类的Hash函数,如果您确实希望它们是唯一的,请与以前生成的哈希进行比较。

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