random_bytes可以是唯一的吗?碰撞百分比?

时间:2016-05-28 08:33:25

标签: php

我在这里搜索,但我发现我的问题一无所获。所以,我在这里发布这个类似初学者的问题。 random_bytes()可以是唯一的吗?它是防撞吗?或至少百分比的碰撞?谢谢你们。

3 个答案:

答案 0 :(得分:3)

根据manual

  

生成适用于加密用途的任意长度的加密随机字节字符串

因此,您可以假设唯一性,当然取决于生成的字符串的长度。如果您需要生成ID,那么请查看UUIDv4,并遵循其生成算法,那么您应该是最安全的。

答案 1 :(得分:0)

随机,它不保证独一无二! 基本问题: 独特的文字,可能是多少人的独特之处?

例如:

1-9范围内的数字,独特地分配给9个人。但对于第十个人来说,这不是一个独特的数字。

您必须编写自己的唯一字节函数。如果可以使用md5()和uniqid()函数,则可以生成唯一的32个字符长度的十六进制密钥。

例如:

$uid = md5(uniqid(mt_rand(), true));

如果您需要更长的唯一键,可以使用mcrypt_encrypt()函数。有时,您使用带有随机数的微秒(例如mt_rand()函数)来生成唯一键

答案 2 :(得分:0)

我使用bin2hex + random_bytes创建随机字符串,例如

  • 如果您只需要一个唯一的ID,请使用bin2hex(random_bytes(16))。它比UUIDv4简单且严格要好。
  • 如果您明确需要与UUID进行互操作或将来有可能需要,请使用UUID。

例如:

$uuid = bin2hex(random_bytes(16));

According to Reddit。而且我们知道,如果它在Reddit上,这是真的