生成*非重复*安全随机数的最佳方法是什么?

时间:2013-09-28 00:06:19

标签: random uuid birthday-paradox

我正在开发一些需要安全随机,短(~40位)ID的东西。它们必须是唯一的,这意味着在中央服务器上进行。

每次使用新的SecureRand都会遇到生日问题并开始花费更长时间来生成新条目。

什么是更好的方法?

1 个答案:

答案 0 :(得分:0)

你是对的,如果只是随机选择它们,即使你只需要几个,40位太短也不能避免碰撞。实际上,无论您使用哪种算法,它都称为“安全”太短暂。但是,假设您需要远远少于其中的万亿,并且您并不真正需要更大空间的安全性,那么您实际上只有一个选择:拒绝采样。即随机生成并与现有的进行比较。这不会“开始花费更长的时间”,就像你说的那样,直到你真的接近万亿,因为你可以找到带有O(1)哈希的旧用的。使用像40位循环生成器这样不会重复并仅跟踪“最后”循环生成器的东西将不安全,并且使并行化变得困难。