Cifra Android lançando BadPaddingException, mas não em Java
Estou usando alguma criptografia básica no meu aplicativo, que está executando o Android v20 (4.4.4)
Isso costumava funcionar, mas acho que com a versão mais recente do Android que estou executando, agora há um erro ao lançar a seguinte exceção:
10-28 12:42:02.312 5173-5332/com.app W/System.err﹕ javax.crypto.BadPaddingException: pad block corrupted
10-28 12:42:02.312 5173-5332/com.app W/System.err﹕ at com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(BaseBlockCipher.java:739)
10-28 12:42:02.322 5173-5332/com.app W/System.err﹕ at javax.crypto.Cipher.doFinal(Cipher.java:1204)
10-28 12:42:02.322 5173-5332/com.app W/System.err﹕ at com.app.utils.CryptoClass.decrypt(CryptoClass.java:47)
10-28 12:42:02.322 5173-5332/com.app W/System.err﹕ at com.app.utils.CryptoClass.decrypt(CryptoClass.java:30)
O método que está lançando isso está aqui:
private static byte[] decrypt(byte[] rawKey, byte[] encrypted) throws Exception {
SecretKeySpec spec = new SecretKeySpec(rawKey, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, spec);
return cipher.doFinal(encrypted); //THIS LINE THROWS EXCEPTION
}
Quando executo o mesmo código que um projeto Java, ele funciona corretamente (usando a mesma versão do Java, 1.7 que o Android está usando).
Eu tentei várias combinações para o parâmetro getInstance com base no que encontrei on-line, comoAES/CBC/PKCS5PADDING
mas isso não resolve o problema.
O método getRawKey que estou usando:
private static byte[] getRawKey(byte[] bytes) throws Exception {
KeyGenerator keygen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG", "SECRET");
secureRandom.setSeed(bytes);
keygen.init(128, secureRandom);
SecretKey secretKey = keygen.generateKey();
return secretKey.getEncoded();
}
Qualquer ajuda apreciada, obrigado.