Задать вопрос
@Billy_Milligan

Как исправить ошибку при расшифровке AES?

При расшифровке получаю ошибку.

javax.crypto.BadPaddingException: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt


Шифрую и расшифровываю так.

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 available
        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 available
        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;
    }


Подскажите, как избавиться от ошибки?
  • Вопрос задан
  • 5650 просмотров
Подписаться 3 Оценить Комментировать
Решение пользователя Billy Milligan К ответам на вопрос (2)
@Billy_Milligan Автор вопроса
Ошибка из-за OpenSSL начиная с android 4.2 и выше.

Проблема решается так.
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
Ответ написан
Комментировать