Как исправить ошибку при расшифровке AES? При расшифровке получаю ошибку.javax.crypto.BadPaddingException: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decryp
Шифрую и расшифровываю так.private static byte[] password = null; // this.password = editText.getBytes()
static final byte[] ivBytes = {'6','g','6','o','d','a','0','u','4','n','w','i','6','9','i','j'}
public static byte[] encrypt(String text) throws Exception
byte[] clear = text.getBytes("UTF-8")
IvParameterSpec ivSpec = new IvParameterSpec(ivBytes)
KeyGenerator kgen = KeyGenerator.getInstance("AES")
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG")
sr.setSeed(password)
kgen.init(256, sr); // 192 and 256 bits may not be availabl
SecretKey skey = kgen.generateKey()
byte[] key = skey.getEncoded()
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES")
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivSpec)
byte[] encrypted = cipher.doFinal(clear)
return encrypted

public static String decrypt(byte[] encrypted) throws Exception
IvParameterSpec ivSpec = new IvParameterSpec(ivBytes)
KeyGenerator kgen = KeyGenerator.getInstance("AES")
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG")
sr.setSeed(password)
kgen.init(256, sr); // 192 and 256 bits may not be availabl
SecretKey skey = kgen.generateKey()
byte[] key = skey.getEncoded()
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES")
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivSpec)
String decrypted = new String(cipher.doFinal(encrypted))
return decrypted

Подскажите, как избавиться от ошибки?

21 Авг 2019 в 07:14
179 +1
0
Ответы
1

Ошибка javax.crypto.BadPaddingException: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt обычно возникает из-за неправильного padding'а шифртекста. Для исправления этой ошибки нужно убедиться, что при шифровании и расшифровании используется одинаковый padding.

В вашем коде вы используете PKCS5Padding при шифровании, поэтому при расшифровке также нужно использовать тот же padding. Попробуйте изменить строку:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

на

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

Это должно помочь избавиться от ошибки BadPaddingException при расшифровке данных.

20 Апр в 13:05
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 581 автору
Первые отклики появятся уже в течение 10 минут
Прямой эфир