uniqid()与更多熵的复制有多容易?

时间:2016-05-23 20:13:43

标签: php unique-id

这可能是一个偏离主题的问题,但我希望有人可以回答这个问题。

具有更多熵的uniqid()多少纳秒,毫秒或秒会产生重复的风险?

参考下面的链接,如果在一个毫秒内创建两个id,uniqid将发生冲突。那么熵更多呢?

(我的目标是在创建时使用一个小的可索引字母数字字符串作为文档ID,可以使用最小的处理器功率快速创建,而不会产生数据库干扰。)

这里的答案似乎没有提供任何确切的数字: How unique is uniqid?

1 个答案:

答案 0 :(得分:5)

source code开始,more_entropy会添加九个随机十进制数字,因此在37,000左右的调用后您可能会发生冲突。 (关于十亿变成37,000,请参阅birthday attack。)当然,这忽略了这些数字实际上不是随机但由LCG生成的事实,并且相同的LCG可能用于其他在代码中的位置,所以碰撞的实际机会可能更高(确切地说,我不知道多少)。

另外值得注意的是uniqid实际上并不能保证微秒的分辨率,因为某些PHP实现(特别是Windows)无法访问微秒精度时钟。

简而言之,如果您需要一个安全敏感的唯一ID,或者碰撞成本很高,请避免使用uniqid。否则,将其与more_entropy一起使用可能没问题(尽管常见模式是使用uniqid(mt_rand(), true)来添加更多额外的熵)。