Baru-baru ini ditingkatkan dari BC 1.34 menjadi 1.45. Saya mendekode beberapa data yang dikodekan sebelumnya dengan yang berikut:
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal(encrypted);
Saat menggunakan BC 1.45 saya mendapatkan pengecualian ini:
javax.crypto.BadPaddingException: pad block corrupted
at org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(JCEBlockCipher.java:715)
at javax.crypto.Cipher.doFinal(Cipher.java:1090)
EDIT: Lebih lanjut tentang masalah ini. Saya menggunakan yang berikut ini untuk menghasilkan kunci mentah dari frasa sandi:
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();
Apa yang saya temukan adalah ini menghasilkan dua nilai berbeda untuk BC 1.34 vs 1.45.
Ini mungkin juga tidak terkait dengan BouncyCastle (Saya menguji pada Android 2.3)