เพิ่งอัปเกรดจาก 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)