gpt4 book ai didi

java - Java 随机 UUID 是可预测的吗?

转载 作者:IT老高 更新时间:2023-10-28 20:45:40 25 4
gpt4 key购买 nike

我想为数据库中的敏感数据使用加密安全的主键 - 这无法猜测/预测,并且无法由数据库生成(我需要在对象被持久化之前的 key )。

我了解 Java 使用类型 4 UUID 和加密安全的随机数生成器,但是我知道 UUID 不是完全随机的,所以我的问题是假设无法从一组现有的 uuid 中预测它有多安全?

最佳答案

如果您想知道 UUID 的随机性,您必须查看源代码。

以下代码部分取自 OpenJDK7 (在 OpenJDK6 中是相同的):

public static UUID randomUUID() {
SecureRandom ng = numberGenerator;
if (ng == null) {
numberGenerator = ng = new SecureRandom();
}

byte[] randomBytes = new byte[16];
ng.nextBytes(randomBytes);
randomBytes[6] &= 0x0f; /* clear version (set highest 4 bits to zero) */
randomBytes[6] |= 0x40; /* set to version 4 */
randomBytes[8] &= 0x3f; /* clear variant (set highest 2 bits to zero) */
randomBytes[8] |= 0x80; /* set to IETF variant */
return new UUID(randomBytes);
}

如您所见,16 个字节中只有 2 个不是完全随机的。在第 6 个字节中,您丢失了 8 位中的 4 位,而在第 8 字节中,您丢失了 2 位随机性。

因此你会得到一个 122 位随机性的 128 位值。

该操作可能引起的唯一问题是,您的数据很有可能被识别为 UUID。因此,如果您想将其隐藏在其他随机数据中,这将不起作用...

关于java - Java 随机 UUID 是可预测的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7532807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com