如何做到这一点?我想获取生成的 aes key 并将其转换为明文 16 字节表示
public SecretKey generateAesKey() throws NoSuchAlgorithmException{
KeyGenerator keygen;
keygen = KeyGenerator.getInstance("AES");
keygen.init(128);
SecretKey aesKey = keygen.generateKey();
return aesKey;
}
我用它来生成 key (很确定 key 将是 32 字节,除非我正在考虑 256 位 key ?)
最佳答案
SecretKey
类有一个 .getEncoded()
方法,它将返回您的 key 。
您可以使用以下方法获取十六进制的字符串表示形式(例如):
private static String bytesToHexRepresentation(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02X ", b));
}
return sb.toString();
}
因此你可以这样做:
SecretKey myKey = generateAesKey();
byte[] encodedBytes = myKey.getEncoded();
String s = bytesToHexRepresentation(encodedBytes);
System.out.printf(s);
以漂亮的十六进制表示形式打印您的 key 。
至于你的第二个问题:
- 对于 128 位, key 为 16 字节(您当前的情况)
- 对于 192 位, key 为 24 字节
- 对于 256 位, key 为 32 字节
关于Java aes key 到 32 字节字符串表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31601013/