1

如何才能做到这一点?我想获取生成的 aes 密钥并将其转换为明文 16 字节表示

        public SecretKey generateAesKey() throws NoSuchAlgorithmException{
                KeyGenerator keygen;
                keygen = KeyGenerator.getInstance("AES");
                keygen.init(128);
                SecretKey aesKey = keygen.generateKey();
                return aesKey;
        }

我用它来生成密钥(很确定密钥是 32 字节,除非我在考虑 256 位密钥?)

4

1 回答 1

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 字节
于 2015-07-24T02:29:20.180 回答