了解与自定义哈希的冲突

时间:2011-12-06 05:47:19

标签: python random collision

我在我的应用程序中使用以下内容:

base64.urlsafe_b64encode(str(random.getrandbits(20))).lower().replace('=', '')

减少审美变化:

base64.urlsafe_b64encode(str(random.getrandbits(20))

如何找出发生碰撞的可能性?

2 个答案:

答案 0 :(得分:0)

一个random.getrandbits(20)与另一个碰撞的可能性相同,因为外部函数是确定性的。

如果random.getrandbits的输出实际上是随机的 - 一个人与另一个人相撞的机会是1 /(2 ^ 20)或......大约 1百万< / EM>

对于n个条目,附加条目(条目n + 1)碰撞的机会是n /(2 ^ 20)。因此概率随着字典中条目的数量线性增长。在1,048,576个条目中,保证下一个条目将发生冲突。

答案 1 :(得分:0)

有2 ^ 20种不同的可能随机值。因此,两个给定随机值相等的概率是1 /(2 ^ 20),或大约 1百万

但是,如果您要创建多个值,那么由于birthday paradox,您只需生成大约2 ^ 10或大约一千个不同的值就有50%的几率其中两个是平等的!

为避免这种情况,我建议至少128位。这需要大约2 ^ 64(~18亿亿)的值才有50%的碰撞几率。当编码到base-64时,这将是22个字符长。