【发布时间】:2014-06-29 17:06:42
【问题描述】:
我想在 java 中生成一个 128 位的随机密钥。我正在使用以下内容:
byte[] byteBucket = new byte[bytelength];
randomizer.nextBytes(byteBucket);
我的字节数组长度是 16 作为 (16*8=128) 还是 128?
【问题讨论】:
我想在 java 中生成一个 128 位的随机密钥。我正在使用以下内容:
byte[] byteBucket = new byte[bytelength];
randomizer.nextBytes(byteBucket);
我的字节数组长度是 16 作为 (16*8=128) 还是 128?
【问题讨论】:
试试 SecureRandom API。
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[16]; // 128 bits are converted to 16 bytes;
random.nextBytes(bytes);
【讨论】:
有一个类叫java.util.UUID,用method生成random-basedUUID。这个128-bit 值有122 位随机生成。
UUID uuid = UUID.randomUUID() ;
调用toString 以将值视为插入连字符的规范格式的十六进制字符串。
uuid.toString(): 24b47cf5-fb53-4fb1-a5a2-8b415260304d
您可以将 128 位提取为一对 64 位 long 整数。致电getMostSignificantBits() 和getLeastSignificantBits()。
long mostSignificant = uuid.getMostSignificantBits() ;
long leastSignificant = uuid.getLeastSignificantBits() ;
此值可能不适用于 4 位可预测(非随机)的关键安全应用程序。但在其他实际应用中,这个方便的类可能会很好用。
这是我在 SO 上找到的一个问题,有更详细的解释:Likelihood of collision using most significant bits of a UUID in Java
【讨论】:
java.util.UUID/randomUUID 不适用于通用的 128 位随机数生成,因为它只生成 122 个随机位。见en.wikipedia.org/wiki/…