小编典典

升级到1.45时BouncyCastle AES错误

java

最近从BC 1.34升级到1.45。我正在使用以下代码解码一些先前编码的数据:

    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec);
    byte[] decrypted = cipher.doFinal(encrypted);

使用BC 1.45时,出现以下异常:

javax.crypto.BadPaddingException: pad block corrupted
 at org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(JCEBlockCipher.java:715)
 at javax.crypto.Cipher.doFinal(Cipher.java:1090)

编辑:有关此问题的更多信息。我正在使用以下内容从密码短语生成原始密钥:

    KeyGenerator kgen = KeyGenerator.getInstance("AES", "BC");
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
    sr.setSeed(seed);
    kgen.init(128, sr);
    SecretKey skey = kgen.generateKey();
    byte[] raw = skey.getEncoded();

我发现这导致BC 1.34与1.45的两个不同值。

它也可能与BouncyCastle不相关(我正在Android 2.3上进行测试)


阅读 485

收藏
2020-09-26

共1个答案

小编典典

看起来问题在于SecureRandom无法跨Froyo-Gingerbread边界移植。这篇文章描述了类似的问题:

http://groups.google.com/group/android-security-
discuss/browse_thread/thread/6ec015a33784b925

我不确定SecureRandom中到底发生了什么变化,但是我发现解决此问题的唯一方法是使用通过可移植方法生成的密钥重新加密数据。

2020-09-26