我在我的应用程序中使用以下内容:
base64.urlsafe_b64encode(str(random.getrandbits(20))).lower().replace('=', '')
减少审美变化:
base64.urlsafe_b64encode(str(random.getrandbits(20))
如何找出发生碰撞的可能性?
答案 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个字符长。