zaLinux.ru

Как шифровать строки в OpenSSL


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

echo 'Текст для шифрования' | openssl enc -base64 -aes-256-cbc -iter 1000000 -pass pass:ПАРОЛЬ

Вывод:

U2FsdGVkX19dVUjYAX58nYeNWEcJUqpywiFsZzD2DHPz7kNX97YUwqvp7KxV9Dme
dwfBncJ5zcoIRctPdQkXsg==

Расшифровка делается таким же образом (нужно дополнительно указать опцию -d):

echo "U2FsdGVkX19dVUjYAX58nYeNWEcJUqpywiFsZzD2DHPz7kNX97YUwqvp7KxV9DmedwfBncJ5zcoIRctPdQkXsg==" | openssl enc -base64 -d -aes-256-cbc -iter 1000000 -pass pass:ПАРОЛЬ

ВНИМАНИЕ: Если вы используете openssl, то можно предположить, что конфиденциальность данных и, следовательно, пароль, важны для вас. Если это так, вы никогда не должны указывать пароль в командной строке, потому что он может быть показан любому, кто имеет право запускать команду ps (смотрите Как использовать команду ps для мониторинга процессов Linux).


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

export passwd="ПАРОЛЬ"
echo "U2FsdGVkX19dVUjYAX58nYeNWEcJUqpywiFsZzD2DHPz7kNX97YUwqvp7KxV9DmedwfBncJ5zcoIRctPdQkXsg==" | openssl enc -base64 -d -aes-256-cbc -iter 1000000 -pass env:passwd

Если вы не будете использовать преобразование в кодировку Base64 и будете запускать команду вроде:

echo 'ТЕКСТ ДЛЯ ШИФРОВАНИЯ' | openssl enc -e -aes-256-cbc -nosalt -pass pass:ПАРОЛЬ

То на выходе вы получите примерно следующее:

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

Если вы попытаетесь расшифровать эту строку так:

echo -n '(??b}n??v???>??G??.?B??~?' | openssl enc -d -aes-256-cbc -pass pass:ПАРОЛЬ

или так:

openssl enc -d -aes-256-cbc -pass pass:ПАРОЛЬ <<< '(??b}n??v???>??G??.?B??~?'

То вы получите ошибку:

bad magic number

Без преобразования в кодировку Base64 можно обойтись если сохранять результат шифрования в файл:

# шифрование в файл
echo -n 'ТЕКСТ ДЛЯ ШИФРОВАНИЯ' | openssl enc -e -nosalt -out test.txt -aes-256-cbc -pass pass:ПАРОЛЬ

# расшифровка из файла
openssl enc -d -nosalt -in test.txt -aes-256-cbc -pass pass:ПАРОЛЬ

# результат расшифровки (если пароль правильный:
ТЕКСТ ДЛЯ ШИФРОВАНИЯ

Рекомендуемые статьи:

1 Комментарий

  1. Вася Пупкин

    Ещё один способ чтобы никто не видел пароль использовать read:

    read -s var; echo 'Текст для шифрования' | openssl enc -base64 -aes-256-cbc -iter 1000000 -pass pass:$var

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *