Расшифровка AES: javax.crypto.IllegalBlockSizeException: последний блок не завершен при расшифровке

1

Я пытаюсь расшифровать зашифрованные данные, полученные из веб-службы, используя криптографию AES128.

следующий код, который я использую для достижения того же.

Но я всегда javax.crypto.IllegalBlockSizeException: last block incomplete in decryption следующее исключение: javax.crypto.IllegalBlockSizeException: last block incomplete in decryption

public static String decrypt(String strToDecrypt)
    {

        try
        {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
            final SecretKeySpec secretKey = new SecretKeySpec(AppConstants.AESEncryptionKey.getBytes("UTF8"), "AES");
            cipher.init(Cipher.DECRYPT_MODE, secretKey,new IvParameterSpec(new byte[16])); //new IvParameterSpec(new byte[16])
            byte base64Data[] = Base64.encode(strToDecrypt.getBytes(), Base64.DEFAULT);
            @SuppressWarnings("unused")
            String s = base64Data.toString();
            byte decBytes[] = cipher.doFinal(base64Data);
            String decStr = new String(decBytes);
            return decStr;
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

Пожалуйста, залейте свои ценные материалы, поскольку я сильно застрял здесь.

  • 0
    В каком формате находится строка, которую вы получаете от веб-службы? Base64 закодировано?
  • 0
    я получаю зашифрованную строку, которую я конвертирую в строку в кодировке base64 и затем дешифрую
Теги:
encryption
exception
aes
cryptography

3 ответа

1
Лучший ответ

Вы кодируете кодированный текст с кодировкой base 64, а не декодируете его. В зависимости от вашего Base64 вам нужно вызвать функцию, которая декодирует из String или CharSequence в массив байтов, а затем расшифровывает это. Пожалуйста, проверьте, является ли результат кратным размеру блока, 16 байтов для AES.

  • 0
    У меня есть еще один хороший вопрос, который вы упомянули о размере блока, я хочу использовать алгоритм AES 128 для расшифровки. Вы знаете, как это сделать.
  • 0
    ОК, сэр, при использовании функции декодирования я получаю следующее исключение теперь javax.crypto.BadPaddingException: блок pad поврежден
Показать ещё 5 комментариев
2

Вы должны вызвать Base64.decodeBase64 (s). Затем вызовите Cipher.doFinal()

Cipher.doFinal(Base64.decodeBase64 (ы));

  • 0
    хорошо, я попробую это и вернусь к вам
  • 0
    в затмении Android я получаю следующую ошибку при использовании decodeBase64 (строка): метод decodeBase64 (String) не определен для типа Base64
Показать ещё 3 комментария
0

Важная заметка

В моем случае эта проблема возникла из-за того, что шифрование не было выполнено должным образом, когда я пытаюсь зашифровать данные в то время, когда мой код с ошибкой вызывает ошибку, потому что при среднем шифровании прекращается, поэтому, как только вы проверяете, что шифрование работает правильно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню