Неверное магическое число при расшифровке

Вопрос или проблема

В апреле я зашифровал файл, используя команду

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 — это проблема, с которой могут столкнуться многие пользователи, работающие с шифрованием файлов. Эта ошибка возникает по нескольким причинам, и каждая из них требует анализа и подходящего решения. Давайте более подробно рассмотрим вероятные причины и методы их устранения.

Возможные причины ошибки и пути их устранения:

  1. Изменение алгоритма генерации ключа:

    • Описание: Если вы зашифровали файл с использованием 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
  2. Отсутствие параметра Base64:

    • Описание: Если файл был зашифрован с использованием base64, но попытка расшифровки проводится без указания этого параметра, это также может вызвать ошибку "bad magic number".
    • Решение: Используйте параметр -a или -base64 при расшифровке:
      openssl enc -d -aes-256-cbc -base64 -pass file:<passwordfile> -in outfil -out infile2
  3. Некорректный формат файла с паролем:

    • Описание: Файл с паролем может содержать несколько строк или другой неподдерживаемый формат, который OpenSSL не может обработать.
    • Решение: Убедитесь, что файл пароля содержит только одну строку без лишних символов или строк.
  4. Различие между инструментами шифрования и дешифрования:

    • Описание: Если файл был зашифрован с использованием другого инструмента (например, Java) и вы пытаетесь его расшифровать с помощью OpenSSL, параметры шифрования могут не совпадать.
    • Решение: Проверьте совместимость используемых инструментов. Если шифрование было проведено в Java, убедитесь, что параметры такие как алгоритм, режим, инициализирующий вектор (IV) и кодировка совпадают с OpenSSL.

Заключение

Ошибка "bad magic number" при расшифровке — это часто возникающая проблема, вызванная несоответствием ожиданий разных версий и параметров OpenSSL или других инструментов шифрования. Контроль и корректировка используемых параметров позволяют успешно решить эту проблему. Не забывайте следить за версиями OpenSSL и изменениями в их поведении, чтобы избежать аналогичных проблем в будущем.

Оцените материал
Добавить комментарий

Капча загружается...