【问题标题】:Java aes key to 32byte string representation32字节字符串表示的Java aes键
【发布时间】:2015-07-24 02:04:01
【问题描述】:

如何做到这一点?我想把得到的 aes 密钥转换成明文的 16 字节表示

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

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

【问题讨论】:

    标签: java encoding aes symmetric-key


    【解决方案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 个字节

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 2018-07-23
      • 2022-01-18
      • 1970-01-01
      • 2011-12-08
      • 2016-03-01
      相关资源
      最近更新 更多