【发布时间】:2016-05-15 21:54:33
【问题描述】:
如何使用 SecureRandom.getInstanceStrong() 生成密钥?
使用此代码,我可以接收具有随机值的字节数组。是否有任何简单的方法来生成给定长度(例如256位)、类型(int、String)和格式(hex的密钥>, bin, dec)?
package com.company;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
public class KeyGen {
public void generate() throws NoSuchAlgorithmException {
SecureRandom random = SecureRandom.getInstanceStrong();
byte[] values = new byte[32]; // 256 bit
random.nextBytes(values);
StringBuilder sb = new StringBuilder();
for (byte b : values) {
sb.append(String.format("%02x", b));
}
System.out.print("Key: ");
System.out.println(sb.toString());
}
}
输出:
Key: 8fcea84897f48f575c22441ece4e7ddb43ac08cd2c1a83fca46c080768468059
【问题讨论】:
-
你当然应该把你的包命名为
com.pany:) -
@MaartenBodewes 只是 IntelliJ IDEA 中的默认模板。
-
啊,好吧,默认使用Eclipse,不知道。对于您自己的密码,您当前的代码似乎没有太大问题。不过,您可能会考虑密钥管理。也许将随机密钥放在某种容器中是个好主意,或者使用教师的公共 PGP 密钥对其进行加密(例如,使用 Bouncy Castle 功能)。