Сервер: Шифрование файла и текста с помощью openssl

Команда 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
Просмотров: 594
Материал помог? Оценка помогает находить устаревшие и спорные решения.

Комментарии

0

Нашли ошибку или хотите дополнить материал?

Комментариев пока нет.Можно первым дополнить материал или сообщить об ошибке.
Telegram