Я знаю, что заданы подобные вопросы, но я не могу исправить свою проблему ни с одним из них.Расшифровка файла: IllegalBlockSizeException: последний незавершенный блок в дешифровке
У меня есть зашифрованный файл, который был создан с помощью следующей команды Unix:
tar cf FILES | gzip | openssl enc -k PASSWORD -aes-256-cbc -e > OUTPUT.tar.gz.enc
Я могу успешно расшифровать файл с соответствующей командой.
Мне нужно расшифровать этот файл в процессе Java. Я использовал код, представленный в this SO answer.
Я использую ту же функцию EVP_BytesToKey
, но s немного отличается main
функция.
Это, как я загрузить зашифрованный файл:
byte[] headerSaltAndCipherText = IOUtils.toByteArray(new
InputStreamReader(new FileInputStream(f)));
В примере кода, кажется, что данные закодированы в base64. Тем не менее, когда я прочитал мой файл, это не так (я могу видеть в ясный заголовок «Salted__»)
Я создал easCBC
объект таким образом:
Cipher aesCBC = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
И я добавил Security.addProvider(new BouncyCastleProvider());
в верхней части функция main
. Я начал использовать BouncyCastle, поскольку я застрял, но это ничего не изменило.
Я также пробовал с PKCS7Padding
и NoPadding
, но не повезло.
Общие проблемы, которые я обнаружил, когда используется неправильное поведение дополнения или зашифрованные данные, которые не кодируются/загружаются должным образом.
Как я не делаю точно так, как в примере, я полагаю, что ответ является вторым решением: я попытался загрузить файл, как в примере, но у меня есть это исключение java.nio.charset.MalformedInputException: Input length = 1
и так или иначе, я не могу использовать функции из JDK 1.7.
Что я делаю неправильно?
Чтобы лучше помочь, разместите свой код как [SSCCE] (http://www.sscce.org), который продемонстрирует вашу проблему. Это позволяет пользователям копировать/вставлять и воспроизводить вашу проблему. –