AES / CBC / PKCS5Padding Ошибка шифрования Java - javax.crypto.BadPaddingException: данный последний блок не заполнен должным образом - PullRequest
2 голосов
/ 21 февраля 2012

Я пытаюсь выполнить шифрование-дешифрование строки с помощью AES / CBC / PKCS5Padding. Я получаю это исключение: javax.crypto.BadPaddingException: данный последний блок заполнен неправильно

строка i 'Я пытаюсь зашифровать: ftp.clarapoint.com

Вот мой код шифрования:

cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");        
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] data = cipher.doFinal(stringDec.getBytes());
byte[] iv = cipher.getIV();

Я передаю метод дешифрования следующим образом: aesKey, data и iv

код расшифровки:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
AlgorithmParameters.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, aesKey, new IvParameterSpec(iv));
byte[] decrypted = cipher.doFinal(data);

Спасибо!

1 Ответ

4 голосов
/ 24 февраля 2012

Вы неправильно передаете ключ или зашифрованный текст, так как этот код работает:

private static void testCode() {
    try {
        String stringDec = "Hi there";
        SecretKey aesKey = new SecretKeySpec(new byte[16], "AES");

        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, aesKey);

        // no encoding given, don't use getBytes() without a Charset.forName("UTF-8")
        byte[] data = cipher.doFinal(stringDec.getBytes());
        byte[] iv = cipher.getIV();

        // doesn't do anything
        AlgorithmParameters.getInstance("AES");

        cipher.init(Cipher.DECRYPT_MODE, aesKey, new IvParameterSpec(iv));
        byte[] decrypted = cipher.doFinal(data);
        System.out.println(new String(decrypted));
    } catch (GeneralSecurityException e) {
        throw new IllegalStateException(e);
    }
}
...