Java aes键到32字节字符串表示

Java aes键到32字节字符串表示,java,encoding,aes,symmetric-key,Java,Encoding,Aes,Symmetric Key,如何做到这一点?我想获取生成的aes secretkey并将其转换为16字节的纯文本表示 public SecretKey generateAesKey() throws NoSuchAlgorithmException{ KeyGenerator keygen; keygen = KeyGenerator.getInstance("AES"); keygen.init(128);

如何做到这一点?我想获取生成的aes secretkey并将其转换为16字节的纯文本表示

        public SecretKey generateAesKey() throws NoSuchAlgorithmException{
                KeyGenerator keygen;
                keygen = KeyGenerator.getInstance("AES");
                keygen.init(128);
                SecretKey aesKey = keygen.generateKey();
                return aesKey;
        }
我用这个来生成密钥
(除非我考虑的是256bit密钥,否则密钥肯定是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字节