Подтвердить что ты не робот

Проблема с расшифровкой строки OpenSSL

Я постараюсь сделать это максимально сжатым.

Я хочу иметь возможность шифровать и дешифровать простые строки с помощью OpenSSL, которые я сделал раньше.

ОДНАКО, должны выполняться следующие условия:

  • Использование простой фразы (без ключей)
  • Нет файлов ввода/вывода
  • Не запрашивать парольную фразу (укажите параметры командной строки для любого направления)

Я там 50%. Я могу успешно выполнить ENCRYPTION с помощью:

echo 'someTextIWantToEncrypt' | openssl enc -e -aes-256-cbc -nosalt -pass pass:mySecretPass

Выходной результат:

(??b}n??v???>??G??.?B??~?

Хорошо, отлично. Теперь я хочу DECRYPT эту строку. Поэтому я:

echo -n '(??b}n??v???>??G??.?B??~?' | openssl enc -d -aes-256-cbc -pass pass:mySecretPass

или даже в качестве альтернативы:

openssl enc -d -aes-256-cbc -pass pass:mySecretPass <<< '(??b}n??v???>??G??.?B??~?'

Но я получаю этот ответ:

bad magic number

Хотя я не хочу использовать файлы ввода/вывода, этот метод работает 100%:

# encrypt to file
echo -n 'someTextIWantToEncrypt' | openssl enc -e -nosalt -out test.txt -aes-256-cbc -pass pass:mySecretPass 

# decrypt from file
openssl enc -d -nosalt -in test.txt -aes-256-cbc -pass pass:mySecretPass

# result of decryption (is successful):
someTextIWantToEncrypt

Итак... как я могу достичь вышеупомянутого процесса дешифрования без, используя файлы ввода/вывода вообще? Я чувствую, что я рядом, но не хватает некоторых мелких деталей.

Спасибо заранее.

4b9b3361

Ответ 1

Проблема заключается в том, что шифрование использует весь набор символов ASCII, включая непечатаемые символы. Если вы хотите иметь возможность вырезать и вставлять зашифрованные данные, вам необходимо преобразовать их только в печатные символы. Вы можете сделать это с помощью опции -base64 (или -a):

echo 'someTextIWantToEncrypt' | \
  openssl enc -base64 -e -aes-256-cbc -nosalt -pass pass:mySecretPass

KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=

Затем расшифруйте его так же:

echo "KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=" | \
  openssl enc -base64 -d -aes-256-cbc -nosalt -pass pass:mySecretPass

ПРЕДУПРЕЖДЕНИЕ: Если вы используете openssl, я могу только предположить конфиденциальность данных и, следовательно, пароль для вас важны. Если это так, вы должны никогда не предоставлять пароль в командной строке, потому что он может быть доступен любому, у кого есть привилегия для запуска ps.

Лучшее решение - это сохранить пароль в переменной окружения и открыть его отсюда:

export passwd="mySecretPass"
echo "KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=" | \
  openssl enc -base64 -d -aes-256-cbc -nosalt -pass env:passwd