Java是32byte字符串表示的关键

时间:2015-07-24 02:04:01

标签: java encoding aes symmetric-key

如何做到这一点?我想把结果aes secretkey转换成明文16byte表示

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

我用它来生成密钥 (非常确定密钥是32字节,除非我想的是256位密钥?)

1 个答案:

答案 0 :(得分: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字节