【问题标题】:Java aes key to 32byte string representation32字节字符串表示的Java aes键
【发布时间】:2015-07-24 02:04:01
【问题描述】:
如何做到这一点?我想把得到的 aes 密钥转换成明文的 16 字节表示
public SecretKey generateAesKey() throws NoSuchAlgorithmException{
KeyGenerator keygen;
keygen = KeyGenerator.getInstance("AES");
keygen.init(128);
SecretKey aesKey = keygen.generateKey();
return aesKey;
}
我正在使用它来生成密钥
(很确定密钥是 32 字节,除非我在考虑 256 位密钥?)
【问题讨论】:
标签:
java
encoding
aes
symmetric-key
【解决方案1】:
SecretKey 类有一个方法 .getEncoded() 将返回您的密钥。
您可以使用以下方法获取十六进制字符串表示形式(例如):
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);
以漂亮的十六进制表示形式打印您的密钥。
关于你的第二个问题:
- 对于 128 位,密钥为 16 字节(您当前的情况)
- 对于 192 位,密钥是 24 个字节
- 对于 256 位,密钥为 32 个字节