【问题标题】:Error while encrypting: java.security.InvalidKeyException: Invalid AES key length: 11 bytes [duplicate]加密时出错:java.security.InvalidKeyException:无效的 AES 密钥长度:11 字节 [重复]
【发布时间】:2017-11-15 07:09:09
【问题描述】:

我在进行加密时遇到以下代码异常。 创建的密钥是“[B@29ee9faa”。 “加密时出错:java.security.InvalidKeyException:无效的 AES 密钥长度:11 个字节”

另外,我已经更新了 jre/lib/security 中的 local_policy 和 Us_export_policy。

  public static String generateKey(String eisId) 
  {
    String uuidKey = null;
    try {

        KeyGenerator gen = KeyGenerator.getInstance("AES");
        gen.init(128); /* 128-bit AES */
        SecretKey secret = gen.generateKey();
        uuidKey = secret.getEncoded().toString();
        System.out.println("uuidKey : "+uuidKey);

        // Store in DB
        // **********************

    } catch (NoSuchAlgorithmException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return uuidKey;
}

public static SealedObject encryptData(String eisId, SecurityDomainDTO sDObj) 
{
    try
    {
        String secret = generateKey(eisId);
        SecretKeySpec aesKey = new SecretKeySpec(secret.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, aesKey);
        SealedObject so = new SealedObject(sDObj, cipher);

        return so;
    } 
    catch (Exception e) 
    {
        System.out.println("Error while encrypting: " + e.toString());
    }
    return null;
}

【问题讨论】:

  • toString() 不能那样工作,无论如何将你的 byte[] 转换为 String 在这里毫无意义。

标签: java encryption


【解决方案1】:

“[B@29ee9faa”字符串是一个很大的线索。这就是您在byte[] 上调用toString() 时将得到的结果。它不代表字节数组的内容。相反,它表示内部类型名称(“[B”)和对象的标识哈希码。

这是错误:

      uuidKey = secret.getEncoded().toString();

这不是格式化字节数组的内容的正确方法。

我建议你使用Base64 类;例如

    Base64.Encoder encoder = Base64.getEncoder();
    String encoded = encoder.encode(bytes);

    ...

    Base64.Decoder decoder = Base64.getDecoder();
    byte[] bytes = decoder.decode(encoded);

【讨论】:

  • 有了这个,它给出了 java.security.InvalidKeyException: Parameters missing"
  • 我建议你想想我所说的......关于解码。如果这没有帮助,请在其中包含更新的代码提出一个新问题。
  • 当然,我认为这应该是一个不同的问题。
猜你喜欢
  • 1970-01-01
  • 2012-06-05
  • 2014-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多