OpenSSL —  мощный набор инструментов и может быть использован для шифрования файлов и сообщений.

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

Как шифровать и расшифровывать файлы и сообщения с помощью пароля из командной строки в Linux?

Шифруемся:

$ openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc
Опции Описание
openssl Утилита командной строки OpenSSL.
enc Шифрование с помощью симметричных алгоритмов шифрования.
-aes-256-cbc Использующийся алгоритм шифрования.
-salt Увеличивает стойкость шифрования.
-in Указывает входной файл.
-out Указывает выходной файл.

256bit AES — это криптографический алгоритм, который использует правительство Соединенных Штатов для шифрования информации на самом секретном уровне.

Опция-salt (соль) должна использоваться ВСЕГДА, если секретный ключ формируется на основе пароля.

Без использования опции -salt, существует возможность проведения высокоэффективной атаки по словарю, что приведет к раскрытию зашифрованных данных. Причина этого заключается в том, что без добавления ‘соли’, один и тот же пароль всегда генерирует один и тот же секретный ключ.

Когда используется соль, первые 8 байтов резервируются под нее. Она генерируется случайным образом при шифровании файла и считывается с зашифрованного файла во время дешифрации.

Расшифровываем:

$ openssl enc -aes-256-cbc -d -in file.txt.enc -out file.txt
Опции Описание
-d Расшифровывает данные.
-in Указывает зашифрованный файл.
-out Указывает куда сохранить расшифрованный файл.

Base64 Кодирование и Декодирование

Кодирование в формат Base64, является стандартным методом для преобразования 8-битной двоичного информации, в ограниченное подмножество символов ASCII, для безопасной транспортировки через системы электронной почты и другие систем, которые не поддерживают 8-битный формат.

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

$ openssl enc -aes-256-cbc -salt -a -in file.txt -out file.txt.enc
Опции Описание
-a Говорит OpenSSL что зашифрованные данные в кодировке Base64.

Так же, опция -a, должна быть указана при дешифрации:

$ openssl enc -aes-256-cbc -d -a -in file.txt.enc -out file.txt

Шифрование / Расшифровывание без запроса пароля

Так как пароль становится видимым, этот метод должен использоваться только там, где безопасность не является важной.

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

При написании BASH скрипта, Вы, возможно, захотите организовать ввод пароля не интерактивно, используя опцию -k.

Как раз для таких случаев было придумано шифрование с открытым ключом.

Шифрование файла, используя предоставленный пароль:

$ openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc -k PASS

Дешифрация файла, используя предоставленный пароль:

$ openssl enc -aes-256-cbc -d -in file.txt.enc -out file.txt -k PASS