在java中生成128位随机密钥

Pha*_*jee 2 java random

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

byte[] byteBucket = new byte[bytelength];
randomizer.nextBytes(byteBucket);
Run Code Online (Sandbox Code Playgroud)

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

Bil*_*ins 7

UUID

有一种称为类java.util.UUID,用方法来生成一个基于随机 UUID.这个128位值有122个随机生成的位.

UUID uuid = UUID.randomUUID() ;
Run Code Online (Sandbox Code Playgroud)

调用toString以插入连字符的规范格式将值视为十六进制字符串.

uuid.toString():24b47cf5-fb53-4fb1-a5a2-8b415260304d

您可以将128位提取为一对64位long整数.打电话getMostSignificantBits()getLeastSignificantBits().

long mostSignificant = uuid.getMostSignificantBits() ;
long leastSignificant = uuid.getLeastSignificantBits() ;
Run Code Online (Sandbox Code Playgroud)

此值可能不适用于4位可预测(非随机)的关键安全应用程序.但在其他实际应用中,这个方便的课程可能会很好.

这是我在SO上找到的一个问题,有更详细的解释:在Java中使用UUID的最重要部分进行冲突的可能性


Pra*_*kam 7

尝试SecureRandom API.

SecureRandom random = new SecureRandom();
byte bytes[] = new byte[16]; // 128 bits are converted to 16 bytes;
random.nextBytes(bytes);
Run Code Online (Sandbox Code Playgroud)

  • new byte[16] 将包含 16 个元素。它们的索引是 0 到 15 (2认同)