Мои константы
public static final String AES_ALGORITHM_MODE_PADDING = "AES/CBC/PKCS5Padding";
public static final String AES = "AES";
public static final String PROVIDER = "BC";
Шифрование
Cipher aesCipher = Cipher.getInstance(AES_ALGORITHM_MODE_PADDING, PROVIDER);
SecretKeySpec aeskeySpec = new SecretKeySpec(rawAesKey, AES);
aesCipher.init(Cipher.ENCRYPT_MODE, aeskeySpec);
byte[] encryptedData = aesCipher.doFinal(data);
this.iv = Base64.encodeBase64(aesCipher.getIV()); //get hold of the random IV
return encryptedData;
В другом классе я делаю расшифровку
IvParameterSpec ivspec = new IvParameterSpec(this.iv); //this is already been converted from base64 to raw form.
Cipher aesCipher = Cipher.getInstance(AES_ALGORITHM_MODE_PADDING, PROVIDER);
SecretKeySpec aeskeySpec = new SecretKeySpec(rawAesKey, AES);
aesCipher.init(Cipher.DECRYPT_MODE, aeskeySpec, ivspec);
return aesCipher.doFinal(rawEncryptedLicenseData);
Теперь, когда я запускаю это, я получаю исключение BadPaddingException в doFinal при расшифровке, что я делаю неправильно? Если я удаляю CBC / PKCS5Padding и IV и просто использую AES, это работает!