Недавно обновлено с 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)