如何才能做到这一点?我想将生成的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个字节

08-27 13:47