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
  • 如果将无限多的值映射到有限多个存储桶,则在某个时候会发生冲突

您所说的“因重新灰化而改变”是什么意思?结果如何?是的。如果以相同的方式重新散列相同的值,则始终会得到相同的散列。如果在对象更改后重新对其进行哈希,则会得到一个不同的哈希值,该哈希值将随之更改。我将把它添加到答案中。我的意思是:当我散列一个对象,然后散列(多次)时,与以相同方式散列(多次)的其他对象发生散列冲突的几率是否会越来越高?为什么是向下投票?