我想在java中生成一个128位的随机密钥。我使用以下内容:
byte[] byteBucket = new byte[bytelength];
randomizer.nextBytes(byteBucket);
我的字节数组长度是16(16 * 8 = 128)还是128?
答案 0 :(得分:7)
有一个名为java.util.UUID
的课程,其method生成random-based UUID。此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
答案 1 :(得分:7)
尝试SecureRandom API。
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[16]; // 128 bits are converted to 16 bytes;
random.nextBytes(bytes);