我想在java中生成一个128位的随机密钥.我使用以下内容:
byte[] byteBucket = new byte[bytelength];
randomizer.nextBytes(byteBucket);
Run Code Online (Sandbox Code Playgroud)
我的字节数组长度是16(16*8 = 128)还是128?
有一种称为类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的最重要部分进行冲突的可能性
尝试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)
| 归档时间: |
|
| 查看次数: |
11959 次 |
| 最近记录: |