Вопрос или проблема
В апреле я зашифровал файл, используя команду
openssl enc -aes-256-cbc -salt -pass file:<passwordfile> < infile > outfil
Теперь я хочу его расшифровать с помощью
openssl enc -d -aes-256-cbc -salt -pass file:<passwordfile> -in outfil -out infile2
но получаю ошибку bad magic number.
Файл, зашифрованный вчера с теми же параметрами, расшифровывается нормально.
Что могло произойти? И есть ли способ восстановить этот архивированный файл?
Если вы зашифровали с помощью OpenSSL <=1.0.2 и расшифровываете с помощью OpenSSL 1.1.0, то это, вероятно, связано с этим:
https://www.openssl.org/docs/faq.html#USER3
Хэш по умолчанию для генерации ключа из пароля изменился между версиями 1.0.2 и 1.1.0. Попробуйте добавить -md md5
в команду расшифровки.
Для полноты: если зашифровать с параметром -a ( Выполнить кодирование/декодирование base64 (псевдоним -base64) ) и расшифровывать без него, то возникает ошибка bad magic number.
Общая причина этой ошибки заключается в том, что ключ, вычисленный OpenSSL из пароля, неверен, то есть не совпадает с ключом, который зашифровал данные.
Одна из причин, почему может возникнуть эта ошибка в ситуации, отличной от первоначального вопроса, заключается в том, если вы шифруете с помощью другого инструмента, нежели OpenSSL, например, шифруете в Java и расшифровываете с помощью SSL.
См. решение здесь для Java: https://stackoverflow.com/questions/22610761/aes-simple-encrypt-in-java-decrypt-with-openssl/55884564#55884564
Команда ниже доставила мне неприятности:
openssl aes-256-cbc -d -in hotmama.tar.bz2.enc -out hotmama.tar.bz2
enter aes-256-cbc decryption password:
bad magic number
И следующая команда их решила, и доставила мне удовольствие:
openssl aes-256-cbc -md md5 -in hotmama.tar.bz2.enc -out hotmama.tar.bz2
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
У меня была та же проблема, и в моем случае было многострочное содержимое в файле пароля.
Я переходил с RSA на ECC и пропустил параметр -A
для openssl "base64"
, поэтому я получил многострочный base64 пароль. openssl "enc"
не смог обработать такой файл пароля, и появилась ошибка bad magic number
.
Полное решение для меня выглядело следующим образом:
openssl "pkeyutl" -derive -inkey "<privateKeyPath>" -peerkey "<publicKeyPath>" |
openssl "base64" -A -out "<symmetricKeyPath>"
openssl "enc" -aes-256-cbc -pbkdf2 -in "<filePath>" -out "<fileEncPath>" -pass "file:<symmetricKeyPath>"
Просто добавьте -base64
в ваш код для расшифровки.
Пример:
шифрование:
openssl enc -a -aes-256-cbc -in secret.txt -out secretcrypte.txt
для расшифровки:
openssl enc -d -aes-256-cbc -base64 -in secretcrypte.txt -out secretdecrypte.txt
.
Ответ или решение
Ошибка "bad magic number" при расшифровке при помощи OpenSSL — это проблема, с которой могут столкнуться многие пользователи, работающие с шифрованием файлов. Эта ошибка возникает по нескольким причинам, и каждая из них требует анализа и подходящего решения. Давайте более подробно рассмотрим вероятные причины и методы их устранения.
Возможные причины ошибки и пути их устранения:
-
Изменение алгоритма генерации ключа:
- Описание: Если вы зашифровали файл с использованием OpenSSL версии <= 1.0.2 и расшифровываете его с помощью OpenSSL 1.1.0 или выше, вы можете столкнуться с этой проблемой. Это связано с тем, что в OpenSSL 1.1.0 изменился алгоритм хэширования, который используется для генерации ключа на основе пароля. В старой версии использовался MD5, а в новой — SHA256.
- Решение: Добавьте параметр
-md md5
в команду расшифровки. Например:openssl enc -d -aes-256-cbc -md md5 -salt -pass file:<passwordfile> -in outfil -out infile2
-
Отсутствие параметра Base64:
- Описание: Если файл был зашифрован с использованием base64, но попытка расшифровки проводится без указания этого параметра, это также может вызвать ошибку "bad magic number".
- Решение: Используйте параметр
-a
или-base64
при расшифровке:openssl enc -d -aes-256-cbc -base64 -pass file:<passwordfile> -in outfil -out infile2
-
Некорректный формат файла с паролем:
- Описание: Файл с паролем может содержать несколько строк или другой неподдерживаемый формат, который OpenSSL не может обработать.
- Решение: Убедитесь, что файл пароля содержит только одну строку без лишних символов или строк.
-
Различие между инструментами шифрования и дешифрования:
- Описание: Если файл был зашифрован с использованием другого инструмента (например, Java) и вы пытаетесь его расшифровать с помощью OpenSSL, параметры шифрования могут не совпадать.
- Решение: Проверьте совместимость используемых инструментов. Если шифрование было проведено в Java, убедитесь, что параметры такие как алгоритм, режим, инициализирующий вектор (IV) и кодировка совпадают с OpenSSL.
Заключение
Ошибка "bad magic number" при расшифровке — это часто возникающая проблема, вызванная несоответствием ожиданий разных версий и параметров OpenSSL или других инструментов шифрования. Контроль и корректировка используемых параметров позволяют успешно решить эту проблему. Не забывайте следить за версиями OpenSSL и изменениями в их поведении, чтобы избежать аналогичных проблем в будущем.