碰撞令人担忧

时间:2012-04-18 16:23:43

标签: php algorithm hash

如果我有一个系统,其中哈希是由100万种可能性的总输入产生的。如果有10%的碰撞几率,我应该担心生成算法运行5次吗?

咦?!

让我们再试一次:

我有一个类似于jsfiddle的系统,用户可以在我的服务器上“保存”文件。现在我使用的是'23456789abcdefghijkmnopqrstuvwxyz',它是33个字符,文件长度为4个字符,总共有1185921个可能性。

“文件名”是随机生成的,如果发生冲突,它会重新运行以获取另一个文件名。使用birthday paradox calculator我可以看到,在我有500个条目后,我有10%的机会发生碰撞。

我连续碰撞的次数超过5次的几率是多少? 4呢?

有没有办法解决这个问题?我应该担心吗? 5000个条目后会发生什么?

那里有一个可以用任何输入解决这个问题的程序吗?

2 个答案:

答案 0 :(得分:3)

我不认为生日悖论计算适用。 1185921中的500个随机数的概率差异,一旦有500个已知唯一数字,一个新数字的概率就不同。

如果您有500个已分配的号码并随机生成一个新号码,则碰撞的赔率为500/1185921。采用500个名称,连续4次碰撞的机会是(500/1185921) 4 < 10 -13 。使用5000个现有文件名,新名称是碰撞的几率是5000/1185921,并且连续4次碰撞的几率是< 10 -9

答案 1 :(得分:1)

我的数学有点生疏,所以请耐心等待 连续获得x次碰撞的可能性很简单:

chance of collision ^ x;  

碰撞的可能性是:

entries/space (which is 500/1185921 or 0.04%).

上面你可以看到,随着条目越多,这种情况就越糟糕(并且空间越大越好)。

还要注意生日悖论可能不是你想要的。 10%的几率是任何两个条目碰撞的可能性,而不是下一个条目碰撞的可能性。