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

标签 java encoding aes symmetric-key

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

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

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

最佳答案

SecretKey 类有一个 .getEncoded() 方法,它将返回您的 key 。

您可以使用以下方法获取十六进制的字符串表示形式(例如):

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);

以漂亮的十六进制表示形式打印您的 key 。

至于你的第二个问题:

  • 对于 128 位, key 为 16 字节(您当前的情况)
  • 对于 192 位, key 为 24 字节
  • 对于 256 位, key 为 32 字节

关于Java aes key 到 32 字节字符串表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31601013/

相关文章:

java - 在哪里可以找到 Java 特性列表

java - 连续生成随机枚举值而不两次获得相同的值

Python 解码对我有效,但对其他人无效

encryption - 存储初始化向量 - 单独的字段?

java - 确定已发生解密

java - AES 加密 IV

java - REST Web Service 特定路径文件上传

java - 如何读取整数、 double 和字符串并将其保存到变量中?

java - 在 UTF-8 编码代码中,使用带重音字符的字符串,该字符串取自以 ISO-8859-1 编码的文件

encoding - Windows-1252 和 ISO-8859-1 之间的确切区别是什么?