Recientemente actualizado de BC 1.34 a 1.45. Estoy decodificar algunos datos codificados previamente con lo siguiente:BouncyCastle Error AES al actualizar a 1.45
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal(encrypted);
Al usar BC 1,45 me sale esta excepción:
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: Más sobre este tema. Estoy utilizando el siguiente para generar claves primas a partir de una frase de contraseña:
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();
Lo que he encontrado es que esto da lugar a dos valores diferentes para BC 1,34 vs 1,45.
Puede que no también estar relacionada-BouncyCastle (estoy probando en Android 2,3)
Estás en la correcta. El contrato para SecureRandom no promete que la semilla que usted suministre manualmente será la * única * semilla que use. Utilizará otras fuentes, como/dev/random en linux/bsd. –
Para futuros lectores: en otras palabras, utilice un método de derivación de clave bien conocido en su lugar, como PBKDF2. –