在java中生成128位随机密钥

时间:2014-05-12 11:04:30

标签: java random

我想在java中生成一个128位的随机密钥。我使用以下内容:

byte[] byteBucket = new byte[bytelength];
randomizer.nextBytes(byteBucket);

我的字节数组长度是16(16 * 8 = 128)还是128?

2 个答案:

答案 0 :(得分:7)

UUID

有一个名为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);