Openssl passin выдает "Неверный пароль прочитан"

Попытка зашифровать файл и сделать исполняемый файл с помощью openssl. Нашел интересный связь, который подходил для моей проблемы с одним вопросом. что означает «мне пришлось передать пароль, используемый для шифрования в команде openssl», что приводит к ошибке.

Создать Напишите свой скрипт (script-base.sh)

#!/bin/sh 
echo "Hello World" 

Зашифруйте свой скрипт (дайте пароль): foobar мой пароль

openssl enc -e -aes-256-cbc -a -in script-base.sh > script-enc 

Напишите обертку (script-final.sh):

#!/bin/sh 
openssl enc -d -aes-256-cbc -a -in script-enc | sh -passin pass:foobar

Запустив «script-final.sh», я вижу следующую ошибку в консоли

enter aes-256-cbc decryption password: bad password read

Хотя следующий код работает, но он устарел

openssl enc -d -aes-256-cbc -a -in script-enc -k foobar | sh -

при использовании выдается следующая ошибка

*** ПРЕДУПРЕЖДЕНИЕ: используется устаревший вывод ключа. Использование -iter или -pbkdf2 было бы лучше. плохая расшифровка

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

... works but [] deprecated: openssl enc -d -aes-256-cbc -a -in script-enc -k foobar | sh -

В этом случае вы указываете -k foobar в качестве опции для команды openssl enc -d, поэтому он используется в качестве пароля для расшифровки, что успешно, поскольку вы фактически зашифровали, используя foobar в качестве пароля (и тот же шифр и KDF по умолчанию). См. ниже об устаревании.

openssl enc -d -aes-256-cbc -a -in script-enc | sh -passin pass:foobar [gives]
enter aes-256-cbc decryption password: bad password read

Здесь вы не указали -passin pass:foobar в качестве опции для openssl, вы предоставили ее в качестве опции для ракушка, который является вторым компонентом конвейера. Поскольку вы не указали пароль в качестве аргумента для openssl, а он необходим, openssl предложил вам ввести его, но вы не ввели действительный ввод (возможно, введя контроль-D или аналогичный), поэтому это не удалось. Если бы вы сделали вместо этого

openssl enc -d -aes-256-cbc -a -in script-enc -passin pass:foobar | sh 

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

Это действительно правда, что вывод ключа, давно используемый (и до сих пор используемый по умолчанию) openssl enc, очень плохой и слабый и подвергался широкой критике на протяжении десятилетий; OpenSSL 1.1.1 (выпущенный в 2018 году, после даты ответа, на который вы ссылаетесь) и выше, наконец, предлагает лучший метод с -pbkdf2 и предупреждает об использовании старого. Однако вы должны обратить внимание на это предупреждение на стороне шифрования, а не расшифровки; как только вы зашифровали с помощью плохого метода, вы должны использовать его для расшифровки (и получить предупреждение). Также обратите внимание, как я прокомментировал по этой ссылке, OpenSSL 1.1.x (и 3.0) несовместимы с более ранними версиями, поэтому, если какая-либо система (ы), вы или кто-либо (например, ваши пользователи, если таковые имеются) хотите, чтобы это работало, используют более старое программное обеспечение это не удастся.

В качестве альтернативы рассмотрите возможность использования чего-то, что изначально было правильно разработано, например GPG, который был рекомендован в ответе Жиля на тот же вопрос (более года назад). Хотя GPG, в зависимости от версии, делает менее удобным предоставление пароля в командной строке, потому что это обычно позволяет его скомпрометировать, но в вашем случае вы уже сами скомпрометируете его, поэтому попытка GPG обеспечить вам безопасность напрасна.

Другие вопросы по теме