Use*_*958 13 java uuid secure-random
我试图理解在SecureRandom生成器上使用UUID.randomUUID()的优点,因为前者在内部使用securerandom.
uoy*_*maz 24
好吧,源代码显示了UUID.randomUUID用途SecureRandom.
public static UUID [More ...] randomUUID() {
SecureRandom ng = numberGenerator;
if (ng == null) {
numberGenerator = ng = new SecureRandom();
}
byte[] randomBytes = new byte[16];
ng.nextBytes(randomBytes);
randomBytes[6] &= 0x0f; /* clear version */
randomBytes[6] |= 0x40; /* set to version 4 */
randomBytes[8] &= 0x3f; /* clear variant */
randomBytes[8] |= 0x80; /* set to IETF variant */
return new UUID(randomBytes);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,您可以使用其中任何一种,但在安全的UUID中,您有6个非随机位,如果您挑剔可能会被视为劣势.
随机数随机重复.随机性越低(除非有一些协调),两次产生相同数字的机会就越大.
https://en.wikipedia.org/wiki/Birthday_problem
随着您生成更多随机数,重复相同数字的可能性会增加,因为每个ID必须与其他每个ID不同.
SecureRandom允许您选择所需的随机性.使它太小,很有可能会重复.您可以在几分之一秒内获得重复的随机32位ID.
UUID将标准设置为128位(或者uoyilmaz指出,122位是随机的)这对于大多数用例来说已经足够了.但是,如果你想要一个随机的字符串,我会想要使用更多的位和/或更高的基数.例如Java支持基数36和64,这意味着你可以有更短的id,或者相同长度ID的随机性.
注意:UUID格式-在其转储中有多个,虽然我没有看到它们的值,但它们只是使字符串更长.
san*_*k78 -4
UUID 不是随机数:它是通用唯一 ID。您可以确定没有人可以生成相同的十六进制字符串。
随机数则是另一回事:它不是十六进制字符串,也不是普遍唯一的。
该库提供了更高效、更完整的 UUID 生成器。
| 归档时间: |
|
| 查看次数: |
10938 次 |
| 最近记录: |