Car*_*los 3 javascript random probability entropy
要求是在用户单击"提交"按钮时向数据库发送唯一ID.所以我使用的是Javascript Math.random方法.我只是想知道获得相同数量和使用的位数的机会或可能性Math.random.
Lee*_*ker 14
你遇到了一个叫做生日问题的事情:即使有366个可能的生日,当你在一个房间里只有26个人时,一对人生日相同的机会优于50-50.通常,当您的数字接近样本大小的平方根时,可能会发生碰撞(26位于366的平方根附近).
Javascript的Math.random()有大约52位的随机性.因此,当您的记录数接近2**26(大约6千万,这是一个相当适中的数据库大小)时,可能会发生冲突.
您应该使用至少128位,最好是256位的加密安全PRNG,以避免冲突.可能有现成的UUID库.
对于给定数量的键k和键空间N,碰撞的近似几率为:
1 - exp(( - k*(k-1))/(2*N))
因此,对于k = 100万条记录,N = 2**52,如果我做了正确的数学计算,则在9000中大约为1.这进一步假设Javascript的Math.random()真正使用了可用的填充52位随机性......这也是我不会做出的假设.