如何才能做到这一点?我想将生成的aes密钥转换为纯文本的16byte表示形式
public SecretKey generateAesKey() throws NoSuchAlgorithmException{
KeyGenerator keygen;
keygen = KeyGenerator.getInstance("AES");
keygen.init(128);
SecretKey aesKey = keygen.generateKey();
return aesKey;
}
我用它来生成密钥
(除非我考虑使用256位密钥,否则确定密钥将为32字节吗?)
最佳答案
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个字节