Команда openssl позволяет просто зашифровать и расшифровать файлы и текст прямо из консоли. Для практических задач чаще всего используют симметричное шифрование с паролем (AES-256).
Базовый пример: шифрование файла паролем
Зашифровать файл secret.txt с запросом пароля и записью результата в secret.txt.enc:
openssl enc -aes-256-cbc -salt -pbkdf2 -iter 100000 -in secret.txt -out secret.txt.enc
Расшифровать тот же файл (нужно ввести тот же пароль):
openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -in secret.txt.enc -out secret.txt.dec
enc— режим шифрования/дешифрования.-aes-256-cbc— алгоритм шифрования (AES-256 в режиме CBC).-salt— добавляет соль, чтобы одинаковый пароль давал разные шифротексты.-pbkdf2— безопасное получение ключа из пароля (рекомендуется).-iter 100000— число итераций PBKDF2 (замедляет подбор пароля).-d— дешифрование (decrypt).
Проверка, что шифрование работает корректно
Простой способ убедиться, что файл шифруется и расшифровывается без ошибок:
openssl enc -aes-256-cbc -salt -pbkdf2 -iter 100000 -in secret.txt -out secret.txt.enc openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -in secret.txt.enc -out secret.txt.dec diff secret.txt secret.txt.dec
Шифрование текста (строки) с выводом в Base64
Иногда нужно зашифровать короткую строку и получить результат, который удобно копировать или хранить в конфиге.
Зашифровать строку в Base64
Пример: шифруем строку «Секретное сообщение 42» и записываем в файл message.enc:
echo "Секретное сообщение 42" | openssl enc -aes-256-cbc -salt -pbkdf2 -iter 100000 -base64 -out message.enc
Внутри message.enc будет Base64-текст, похожий на случайный набор символов.
Расшифровать Base64-строку
Расшифровать содержимое файла message.enc и вывести исходную строку в терминал:
openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -base64 -in message.enc
То же самое через конвейер:
cat message.enc | openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -base64
Использование заранее сгенерированного ключа и IV
Для автоматизированных сценариев (скрипты, cron) пароль вводить неудобно. Вместо пароля можно использовать заранее сгенерированные ключ (key) и вектор инициализации (IV).
Генерация ключа и IV
Генерируем 256-битный ключ и 128-битный IV в hex-формате:
# 32 байта (256 бит) ключа в hex для AES-256 openssl rand -hex 32 > key.hex # 16 байт (128 бит) IV в hex для AES (блок 128 бит) openssl rand -hex 16 > iv.hex
Шифрование файла с использованием key/IV
openssl enc -aes-256-cbc -K "$(cat key.hex)" -iv "$(cat iv.hex)" -in secret.txt -out secret.txt.enc
Дешифрование файла тем же key/IV
openssl enc -d -aes-256-cbc -K "$(cat key.hex)" -iv "$(cat iv.hex)" -in secret.txt.enc -out secret.txt.dec
Потеря файлов key.hex и iv.hex означает полную потерю доступа к данным. Храните их отдельно от зашифрованных файлов и не выкладывайте в репозитории.
Список доступных алгоритмов шифрования
Посмотреть список поддерживаемых блочных шифров в вашей версии openssl:
openssl list -cipher-commands
На практике чаще всего используют:
aes-256-cbc— распространённый и хорошо документированный вариант.aes-256-gcm,chacha20и другие — более современные режимы, но с дополнительными параметрами (теги аутентификации и т.п.).
Рекомендации по безопасности
- Не используйте старые примеры без
-pbkdf2и с-md md5— это устаревшие небезопасные схемы. - Всегда включайте
-salt(по умолчанию он и так используется, но явное указание не повредит). - Подбирайте разумное значение
-iterс учётом мощности сервера (например, 100000 или больше). - Всегда проверяйте расшифровку на тестовых файлах, прежде чем шифровать боевые данные.
- Не храните пароль рядом с зашифрованным файлом; для автоматизации лучше использовать отдельный ключ/IV.
Краткая шпаргалка по openssl enc
- Зашифровать файл паролем:
openssl enc -aes-256-cbc -salt -pbkdf2 -iter 100000 -in file.txt -out file.txt.enc
- Расшифровать файл паролем:
openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -in file.txt.enc -out file.txt
- Зашифровать строку и сохранить в Base64:
echo "my-secret" | openssl enc -aes-256-cbc -salt -pbkdf2 -iter 100000 -base64 -out secret.b64
- Расшифровать Base64-строку:
openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -base64 -in secret.b64
Комментарии
0Нашли ошибку или хотите дополнить материал?