Hash 散列冲突:多个散列的机会增加
当您多次散列对象时,散列冲突的可能性是否在增加Hash 散列冲突:多个散列的机会增加,hash,hash-collision,Hash,Hash Collision,当您多次散列对象时,散列冲突的可能性是否在增加 意思是,hash(hash(object))的冲突几率是否高于hash(object)?取决于您的确切意思 如果哈希值由于重新灰化而改变,则为是,如果没有,则为否 如果对象没有更改,而您对其进行了重新哈希,它将保留相同的哈希。因此,例如,字符串teststring的md5哈希值总是D67C5CBF5B01C9F91932E3B8DEF5E5F8 但是,如果对象发生了更改,并且您因此而重新哈希,您将得到一个新的哈希 现在,如果重新灰化已更改的对象,碰
意思是,
hash(hash(object))
的冲突几率是否高于hash(object)
?取决于您的确切意思
如果哈希值由于重新灰化而改变,则为是,如果没有,则为否
如果对象没有更改,而您对其进行了重新哈希,它将保留相同的哈希。因此,例如,字符串teststring
的md5哈希值总是D67C5CBF5B01C9F91932E3B8DEF5E5F8
但是,如果对象发生了更改,并且您因此而重新哈希,您将得到一个新的哈希
现在,如果重新灰化已更改的对象,碰撞的可能性可能会更高
比如说,你有一个非常简单的对象,它只包含一个整数值,还有一个非常简单的哈希算法,它只取这个值,然后对它进行模20运算。仅在本例中,这是一个故意错误的哈希算法
现在假设有两个对象包含一个随机数。这两个值发生哈希冲突的可能性是1/20
,因为哈希算法中有20个存储桶
如果您现在重新刷新,您再次有机会发生碰撞,或者有机会不发生碰撞
因此,在n
重新灰烬后没有碰撞的可能性是(19/20)^(n+1)
。因此,在第一次重新刷新后(即您拥有原始值并在更改后重新刷新其中一个值),您有90.25%的几率不会发生冲突。在第二次重新碰撞后,您没有任何碰撞的几率降至85.76%。100次重燃后,无碰撞的概率降至0.59%
这完全取决于值在每次重新刷新之前是否更改为新值
另一种证明方法是:
- 散列算法为您提供有限数量的存储桶(=不同的可能散列)
- 您可以为哈希算法提供无限多的不同值
- 每个值都需要映射到一个bucket
- 如果将无限多的值映射到有限多个存储桶,则在某个时候会发生冲突