最近从 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 上进行测试)