Openssl шифрование. OpenSSL: простое шифрование с открытым ключом. Шифрование отдельного файла

Такие инструменты, как OpenSSH и OpenSSL, в представлении не нуждаются. Это вечные друзья любого сисадмина и многих продвинутых пользователей. Однако далеко не все знают об их истинной мощи и возможностях, накопленных за годы разработки. Сегодня тебе откроется масса интересных способов использования этих программ.

OpenSSH

OpenSSH, пришедший на смену дырявому Telnet, до сих пор занимает первое место среди систем удаленного управления благодаря безопасности и простоте в использовании. Разобраться в нем способны все, даже самые хромированные чайники, однако подавляющее большинство пользователей задействует минимум его возможностей. Опустим рассказы о ключах, пробросах портов, проксировании и других полезных, но всем известных приемах и рассмотрим на самом деле интересные и не слишком распространенные способы использования этого инструмента.

INFO

С полным списком команд OpenSSL можно ознакомиться с помощью следующих параметров: list-standart-commands, list-message-digest-commands, list-cipher-commands.

Итак, трюк номер один - множественные подключения. OpenSSH способен обслуживать множество одновременных соединений с одной и той же машиной. Обычно пользователи просто запускают команду и ждут ее завершения, чтобы запустить следующую. К счастью, эту проблему легко обойти путем разделения одного соединения на множество сессий. Просто добавь в конфиг ssh (~/.ssh/config) следующие строки:

ControlMaster auto ControlPath ~/.ssh/mux_%h_%p_%r

Ты сможешь создать столько соединений с одним и тем же сервером, сколько посчитаешь нужным, причем время на повторную аутентификацию тратить будет не нужно.


Трюк номер два - проксирование соединений. Допустим, ты не можешь создать соединение с SSH-сервером напрямую, но можешь использовать для этого другой хост, к которому ты тоже имеешь SSH-доступ. Добавь в свой конфиг следующие строки:

ForwardAgent yes Host host HostName host.com ProxyCommand ssh proxy-host.com \ netcat -q 600 %h %p

Команда ssh host создаст соединение с сервером host.com через сервер proxy-host.com.

Трюк номер три - выход за пределы HTTP-изоляции. Многие организации не просто режут неугодный им трафик, но и принуждают пользователей выходить в Сеть только с использованием HTTP-протокола. Такую несправедливость легко обойти с помощью сorkscrew (www.agroman.net/corkscrew/), который умеет туннелировать SSH-трафик через HTTP. Просто установи его на свою машину и добавь в конфиг следующие строки (где proxy.com и 80 - это адрес внешнего HTTP-прокси и его порт):

Host * ProxyCommand corkscrew proxy.com 80 %h %p

Теперь все соединения пойдут через указанный HTTP-прокси.

Трюк номер четыре - тест пропускной способности сети. Чтобы протестировать скорость соединения, необязательно устанавливать специализированное ПО, достаточно утилиты pv и старого доброго SSH:

$ sudo apt-get install pv $ yes | pv | ssh host.com "cat > /dev/null"

Трюк номер пять - удаленный анализ сетевого трафика. Почти в любой UNIX-системе есть сетевой сниффер tcpdump, однако читать его логи довольно утомительно. Возможности OpenSSH помогут упростить анализ трафика:

$ ssh [email protected] tcpdump -w – "port !22" \ | wireshark -k -i -

Теперь весь трафик, проходящий через host.com, будет виден в графическом окне wireshark на твоей машине.

Трюк номер шесть - передача файлов на низкой скорости. Иногда бывает необходимо передать большое количество файлов на удаленную машину, но сделать это так, чтобы процесс не мешал работе с сетью. В этом случае можно воспользоваться инструментом cstream:

$ sudo apt-get install cstream $ tar -cj /backup | cstream -t 512k | \ ssh host "tar -xj -C /backup"

Трюк номер семь - всегда открытая SSH-сессия. Пользователям ноутбуков, чье соединение с сетью может быть не постоянным, приходится каждый раз заново запускать SSH-клиент в момент, когда сеть появляется, и убивать его при потере соединения. Избежать этого можно с помощью инструмента autossh, который будет поддерживать иллюзию постоянного соединения с сервером, восстанавливая связь, когда сеть окажется доступной:

$ sudo apt-get install autossh $ autossh -M50000 -t server.example.com \ "screen -raAd mysession"

Трюк номер восемь - запуск команды на нескольких серверах одновременно. Комментарии излишни:

$ echo "uptime" | pee "ssh host1" "ssh host2" \ "ssh host3"

Трюк номер девять - удаленное сравнение файлов. Часто требуется сравнить локальную и удаленную версию какого-либо конфига, однако копировать файлы туда-сюда неудобно и долго. В этом случае можно воспользоваться следующей командой:

$ ssh user@host cat /путь/к/удаленному/файлу | \ diff /путь/к/локальному/файлу -

То же самое можно проделать для двух файлов, находящихся на разных серверах:

$ diff <(ssh host1 cat /etc/apt/sources.list) \ <(ssh host2 cat /etc/apt/sources.list)

cpu0: RNG AES

Результаты бенчмарка криптографических средств, встроенных в CPU платформы VIA Eden (процессорные инструкции для работы с алгоритмом блочного симметричного шифрования AES):

% openssl speed -elapsed -evp aes-256-cbc type 16 bytes 64 bytes256 bytes 1024 bytes 8192 bytes aes-256-cbc 21780.33k79591.78k 198578.08k 317102.05k 383371.05k

Трюк номер 10 - одновременный просмотр логов с нескольких машин. С помощью multitail и SSH можно запросто просматривать логи с двух серверов одновременно:

$ sudo apt-get install multitail $ multitail -l "ssh host1 "tail -f \ /var/log/apache2/error.log"" -l "ssh host2 \ "tail -f /var/log/apache2/error.log""

Трюк номер 11 - копирование файлов с одной удаленной машины на другую через локальную. В случае если две удаленные машины не могут установить связь друг с другом, файлы между ними можно передавать, используя свой комп в качестве промежуточного звена:

$ ssh root@host1 "cd /каталог && tar -cf – ." |\ ssh root@host2 "cd /каталог && tar -xf -"

Трюк номер 12 - копирование вывода удаленной команды в буфер обмена. Часто требуется скопировать вывод удаленной команды в буфер обмена, чтобы вставить его в письмо, сообщение форума и т. д. Проще всего это сделать с помощью утилиты xclip:

$ ssh user@host cat /файл.txt | xclip

Трюк номер 13 - синхронизация времени средствами SSH. В случае, если машина не имеет доступа к NTP-серверу или на ней не установлен NTP-клиент, синхронизировать время между машинами можно так:

# date --set="$(ssh user@server date)"

Трюк номер 14 - установка пакетов удаленной машины на локальную. Нередко требуется синхронизировать две машины так, чтобы они имели одинаковый набор установленных пакетов. Стандартными методами сделать это сложно, но с помощью SSH проще простого:

# ssh remotehost "dpkg --get-selections" | \ dpkg --set-selections && dselect install

Трюк номер 15 - снимок удаленного экрана. Можно очень легко получить изображение X-сервера с удаленной машины, воспользовавшись стандартным графическим пакетом ImageMagick:

# ssh user@host "DISPLAY=:0.0 import -window \ root -format png -" | display -format png -

Трюк номер 16 - ускорение передачи данных. Если машины, с которыми установлено соединение, находятся внутри заведомо безопасной сети (например, офис или дом), передачу данных средствами SSH можно несколько ускорить, если использовать менее стойкий алгоритм шифрования. Для этого добавь в конфигурационный файл следующие строки:

Host host.com Ciphers arcfour256 MACs [email protected]

Трюк номер 17 - вывод звука с удаленной машины на локальную. Вместе с картинкой рабочего стола удаленной машины иногда хочется получить и звук. Это делается с помощью банального dd:

$ dd if=/dev/dsp | ssh -c arcfour -C \ user@host dd of=/dev/dsp

Трюк номер 18 - запуск локального скрипта на удаленной машине. Нередко требуется запустить скрипт на удаленной машине, однако копировать его туда совсем необязательно, достаточно выполнить следующую простую команду:

$ ssh -T user@host < script.sh

OpenSSL

OpenSSL представляет собой систему защиты и сертификации данных, которая была разработана в ответ на создание протокола безопасных сокетов SSL компанией Netscape. Вопреки расхожему мнению, OpenSSL вовсе не является инструментом для реализации SSL-протокола и может выполнять множество самых разнообразных функций, в том числе управлять ключами и сертификатами, рассчитывать хеши и т. д. Вот лишь неполный список возможностей этого криптографического комбайна:

  • создание ключей RSA и DSA и управление ими (команды rsa, dsa, dsaparam);
  • создание сертификатов формата x509, формирование запросов на сертификацию, восстановление (команды x509, req, verify, ca, crl, pks12, pks7);
  • симметричное и асимметричное шифрование данных (команды enc, rsautl);
  • расчет хешей (команда dgst);
  • работа с S/MIME (команда s/mime).

Также OpenSSL может быть использован для проверки SSL-серверов и клиентов с помощью специальных команд sclient/s server и для тестирования скорости работы различных алгоритмов (команда speed).

Мы не раз писали о работе с пакетом OpenSSL, поэтому не будем рассматривать стандартные примеры его использования вроде создания хешей и сертификатов, а сразу перейдем к более серьезным трюкам.


Время - деньги

Одна из интересных особенностей OpenSSL заключается в том, что он может провести бенчмарк используемых алгоритмов и скорости установления SSL-соединения. Для этого предназначена стандартная команда s_time. Чтобы оценить скорость установки SSL-соединения, нужно применить ее к команде openssl:

$ openssl s_time -connect gmail.com:443 \ -www /test.html -new 103 connections in 0.75s; 137.33 connections/user sec, bytes read 42436 103 connections in 31 real seconds, 412 bytes read per connection

То же самое можно проделать с помощью наиболее стойких алгоритмов:

$ openssl s_time -ssl3 -cipher HIGH \ -connect gmail.com:443 -www / -new 99 connections in 0.73s; 135.62 connections/user sec, bytes read 40788 99 connections in 31 real seconds, 412 bytes read per connection

Эти две команды позволяют определить максимальную пропускную способность SSL-сервера. Но еще более интересный способ заключается в тестировании всех поддерживаемых алгоритмов. Для этого нам придется прибегнуть к скриптингу:

IFS=":" for c in $(openssl ciphers -ssl3 RSA); do echo $c openssl s_time -connect host:443 -www / -new \ -time 10 -cipher $c 2>&1 | grep bytes echo done

Такая команда позволяет измерить скорость установки SSL-соединения с помощью различных алгоритмов шифрования, что можно использовать, например, для тюнинга SSL-сервера. Если же SSL-сервера как такового еще нет, его легко эмулировать с помощью самого OpenSSL. На серверной машине запускаем OpenSSL-сервер:

Полно ситуаций когда нужно зашифровать определённый файл или папку. Например, если данные передаются по открытым каналам либо сохраняются на внешнем носителе. Многие (в том числе и я) используют truecrypt, однако основное предназначение этой программы - работа с зашифрованными разделами, поэтому она не очень хороша в этом случае.

Для подобных задач вполне подходит OpenSSL - надёжное кросплатформенное решение. OpenSSL поддерживает различные алгоритмы шифрования, плюс он по умолчанию установлен во многих операционных системах, а установка на остальные не составит труда.

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

Простейший способ защиты данных с помощью OpenSSL - симметричное шифрование. Следующие команды шифруют и расшифровывают файл documents.zip, используя алгоритм AES с длиной ключа 256 бит:

Openssl enc -aes-256-cbc -salt -in documents.zip -out documents.enc
openssl enc -d -aes-256-cbc -in documents.enc -out documents.zip

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

Как раз для таких случаев было придумано шифрование с открытым ключом . В общем случае вам понадобится создать открытый и закрытый ключи. Первая команда сгенерирует закрытый ключ private.pem, вторая создаст открытый ключ public.pem:

Openssl genrsa -out private.pem -aes256 2048
openssl rsa -in private.pem -pubout -out public.pem

В результате вы получаете пару RSA ключей длиной 2048 бит. К сожалению, в системе RSA размер шифруемых данных ограничен размером ключа, поэтому зашифровать более 2Кб данных не получится. Есть способ обойти это - информация сначала шифруется симметричным алгоритмом (подобно использованному выше) с использованием одноразового ключа. Затем этот одноразовый ключ шифруется публичным ключом. При расшифровке одноразовый ключ расшифровывается закрытым. Подробнее об этом уже было очень хорошо написано в статье на Хабре .

Автоматизировать шифрование поможет следующий скрипт, на выходе которого вы получите одноразовый ключ и данные (encrypt.sh) в зашифрованном виде:

FILENAME="$1"
PUBLICKEY="$2"
SESSIONKEY="$3"
RESULT="$4"

# Generate the random symmetric-key
PASSIZE=30
if [ -c /dev/urandom ] ; then
KEY=`head -c 30 /dev/urandom | openssl enc -base64`
else
KEY=`openssl rand -base64 30`
fi
export KEY

# Encrypt the symmetric key using the public key
openssl rsautl -encrypt -inkey "$PUBLICKEY" -out "$SESSIONKEY" -pubin < $KEY
EOF

# Encrypt the file
openssl enc -aes-256-cbc -pass env:KEY -in "$FILENAME" -out "$RESULT"

Следующая команда использует открытый ключ public.pem чтобы зашифровать файл documents.zip. Она сгенерирует зашифрованный одноразовый ключ session.key и зашифрованные данные documents.enc:

./encrypt.sh documents.zip public.pem session.key documents.enc

Скрипт для дешифрования (decrypt.sh):

PRIVATEKEY="$1"
SESSIONKEY="$2"
ENCRYPTED="$3"
DECRYPTED="$4"

# Decrypt the symmetric key using the private key
KEY=` openssl rsautl -decrypt -inkey "$PRIVATEKEY" -in "$SESSIONKEY" `
export KEY

# Decrypt the file
openssl enc -aes-256-cbc -d -pass env:KEY -in "$ENCRYPTED" -out "$DECRYPTED"

Команда для дешифрования использует закрытый ключ private.pem и одноразовый ключ session.key чтобы расшифровать файл documents.enc. Она сгенерирует файл documents.zip:

./decrypt.sh private.pem session.key documents.enc documents.zip

Как видите, шифрование с открытым ключом может быть почти таким же простым как и симметричное. Но есть ещё более простой путь. На написание этого поста меня побудил блог SbF₅ . Его автор (несомненно более искушённый в bash чем я) написал скрипт , который архивирует папку, шифрует её открытым ключом и генерирует другой скрипт, содержащий в себе всё необходимое: одноразовый ключ, данные и собственно команды для расшифровывания. Кроме того, скрипт может сгенерировать для вас пару RSA ключей:

./encrypt-file.sh -keys public.pem private.pem
./encrypt-file.sh folder public.pem > decrypt-folder.sh
chmod +x decrypt-folder.sh
./decrypt-folder.sh private.pem > folder.tar

В этом примере мы сначала сгенерировали пару ключей. После этого папка folder была зашифрована в скрипт decrypt-folder.sh а затем расшифрована в архив folder.tar. Возможный минус этого способа - то что данные в decrypt-folder.sh хранятся в формате BASE64, а следовательно их размер увеличивается.

UPD Перенесено в блог Информационная безопасность.

Полно ситуаций когда нужно зашифровать определённый файл или папку. Например, если данные передаются по открытым каналам либо сохраняются на внешнем носителе. Многие (в том числе и я) используют truecrypt, однако основное предназначение этой программы - работа с зашифрованными разделами, поэтому она не очень хороша в этом случае.

Для подобных задач вполне подходит OpenSSL - надёжное кросплатформенное решение. OpenSSL поддерживает различные алгоритмы шифрования, плюс он по умолчанию установлен во многих операционных системах, а установка на остальные не составит труда.

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

Простейший способ защиты данных с помощью OpenSSL - симметричное шифрование. Следующие команды шифруют и расшифровывают файл documents.zip, используя алгоритм AES с длиной ключа 256 бит:

Openssl enc -aes-256-cbc -salt -in documents.zip -out documents.enc
openssl enc -d -aes-256-cbc -in documents.enc -out documents.zip

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

Как раз для таких случаев было придумано шифрование с открытым ключом . В общем случае вам понадобится создать открытый и закрытый ключи. Первая команда сгенерирует закрытый ключ private.pem, вторая создаст открытый ключ public.pem:

Openssl genrsa -out private.pem -aes256 2048
openssl rsa -in private.pem -pubout -out public.pem

В результате вы получаете пару RSA ключей длиной 2048 бит. К сожалению, в системе RSA размер шифруемых данных ограничен размером ключа, поэтому зашифровать более 2Кб данных не получится. Есть способ обойти это - информация сначала шифруется симметричным алгоритмом (подобно использованному выше) с использованием одноразового ключа. Затем этот одноразовый ключ шифруется публичным ключом. При расшифровке одноразовый ключ расшифровывается закрытым. Подробнее об этом уже было очень хорошо написано в .

Автоматизировать шифрование поможет следующий скрипт, на выходе которого вы получите одноразовый ключ и данные (encrypt.sh) в зашифрованном виде:

FILENAME="$1"
PUBLICKEY="$2"
SESSIONKEY="$3"
RESULT="$4"

# Generate the random symmetric-key
PASSIZE=30
if [ -c /dev/urandom ] ; then
KEY=`head -c 30 /dev/urandom | openssl enc -base64`
else
KEY=`openssl rand -base64 30`
fi
export KEY

# Encrypt the symmetric key using the public key
openssl rsautl -encrypt -inkey "$PUBLICKEY" -out "$SESSIONKEY" -pubin < $KEY
EOF

# Encrypt the file
openssl enc -aes-256-cbc -pass env:KEY -in "$FILENAME" -out "$RESULT"

Следующая команда использует открытый ключ public.pem чтобы зашифровать файл documents.zip. Она сгенерирует зашифрованный одноразовый ключ session.key и зашифрованные данные documents.enc:

./encrypt.sh documents.zip public.pem session.key documents.enc

Скрипт для дешифрования (decrypt.sh):

PRIVATEKEY="$1"
SESSIONKEY="$2"
ENCRYPTED="$3"
DECRYPTED="$4"

# Decrypt the symmetric key using the private key
KEY=` openssl rsautl -decrypt -inkey "$PRIVATEKEY" -in "$SESSIONKEY" `
export KEY

# Decrypt the file
openssl enc -aes-256-cbc -d -pass env:KEY -in "$ENCRYPTED" -out "$DECRYPTED"

Команда для дешифрования использует закрытый ключ private.pem и одноразовый ключ session.key чтобы расшифровать файл documents.enc. Она сгенерирует файл documents.zip:

./decrypt.sh private.pem session.key documents.enc documents.zip

Как видите, шифрование с открытым ключом может быть почти таким же простым как и симметричное. Но есть ещё более простой путь. На написание этого поста меня побудил блог SbF₅ . Его автор (несомненно более искушённый в bash чем я) написал скрипт , который архивирует папку, шифрует её открытым ключом и генерирует другой скрипт, содержащий в себе всё необходимое: одноразовый ключ, данные и собственно команды для расшифровывания. Кроме того, скрипт может сгенерировать для вас пару RSA ключей:

./encrypt-file.sh -keys public.pem private.pem
./encrypt-file.sh folder public.pem > decrypt-folder.sh
chmod +x decrypt-folder.sh
./decrypt-folder.sh private.pem > folder.tar

В этом примере мы сначала сгенерировали пару ключей. После этого папка folder была зашифрована в скрипт decrypt-folder.sh а затем расшифрована в архив folder.tar. Возможный минус этого способа - то что данные в decrypt-folder.sh хранятся в формате BASE64, а следовательно их размер увеличивается.

UPD Перенесено в блог Информационная безопасность.

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

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

Из данной статьи Вы узнаете как шифровать и расшифровывать файлы и сообщения с помощью пароля из командной строки в Linux, используя OpenSSL.

Как: Зашифровать файл

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

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

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

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

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

Как: Расшифровать файл

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

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

Как вы поняли из этих статей, не каждая программа которая обещает шифровать файлы обеспечивает безопасность информации. Как говорит Брюс Шнайер — «Криптография бывает двух типов: криптография, которая помешает читать ваши файлы вашей младшей сестре, и криптография, которая помешает читать ваши файлы дядям из правительства». OpenSSL очень популярная библиотека, которою для криптографии используют многие — как платные, так и бесплатные программы. В OpenSSL реализовано большое количество алгоритмов и режимов шифрования, что позволяет сделать выбор вам самим, а не разработчику программы.
Помимо самой библиотеки в пакет OpenSSL входит набор консольных утилит. В данной статье речь пойдёт о шифровании файлов симметричными алгоритмами.
Для шифрования файла с помощью OpenSSL надо воспользоваться командой openssl enc . Для этого доступен широкий выбор алгоритмов шифрования которые поддерживает OpenSSL — Blowfish , Camellia , DES , RC2 , RC4 , RC5 , IDEA , AES и другие. Помимо разнообразных алгоритмов также доступны разные режимы шифрования — ECB , CBC , CFB , OFB . Некоторые режимы шифрования можно использовать с разной разрядностью.
Для того что-бы просмотреть список опций команды openssl enc достаточно набрать:

$ openssl enc --help
options are
-in input file
-out output file
-pass pass phrase source
-e encrypt
-d decrypt
-a/-base64 base64 encode/decode, depending on encryption flag
-k passphrase is the next argument
-kfile passphrase is the first line of the file argument
-md the next argument is the md to use to create a key
from a passphrase. One of md2, md5, sha or sha1
-S salt in hex is the next argument
-K/-iv key/iv in hex is the next argument
- print the iv/key (then exit if -P)
-bufsize buffer size
-nopad disable standard block padding
-engine e use engine e, possibly a hardware device.
Cipher Types
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ecb -aes-128-ofb
-aes-192-cbc -aes-192-cfb -aes-192-cfb1
-aes-192-cfb8 -aes-192-ecb -aes-192-ofb
-aes-256-cbc -aes-256-cfb -aes-256-cfb1
-aes-256-cfb8 -aes-256-ecb -aes-256-ofb
-aes128 -aes192 -aes256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1
-camellia-128-cfb8 -camellia-128-ecb -camellia-128-ofb
-camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1
-camellia-192-cfb8 -camellia-192-ecb -camellia-192-ofb
-camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1
-camellia-256-cfb8 -camellia-256-ecb -camellia-256-ofb
-camellia128 -camellia192 -camellia256
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-des -des-cbc -des-cfb
-des-cfb1 -des-cfb8 -des-ecb
-des-ede -des-ede-cbc -des-ede-cfb
-des-ede-ofb -des-ede3 -des-ede3-cbc
-des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8
-des-ede3-ofb -des-ofb -des3
-desx -desx-cbc -idea
-idea-cbc -idea-cfb -idea-ecb
-idea-ofb -rc2 -rc2-40-cbc
-rc2-64-cbc -rc2-cbc -rc2-cfb
-rc2-ecb -rc2-ofb -rc4
-rc4-40 -rc5 -rc5-cbc
-rc5-cfb -rc5-ecb -rc5-ofb
-seed -seed-cbc -seed-cfb
-seed-ecb -seed-ofb

После блока Cipher Types перечисляются доступные алгоритмы вместе с режимами. Шифрования по алгоритму DES представлено несколькими вариантами. Помимо стандартного DES есть ещё тройной 3DES (который тоже в нескольких вариантах) и DESX . Теперь давайте попробуем зашифровать что-то.

$ openssl enc -e -in infile.txt -out outfile.bf_cbc -bf-cbc

Эта команда зашифрует файл infile.txt по алгоритму blowfish в режиме CBC и запишет результат в файл outfile.bf_cbc . Перед тем как зашифровать будет запрошен ключ для шифрования. Для расшифровки этого файла надо воспользоваться такой командой:

$ openssl enc -d -in outfile.bf_cbc -out dec_file.txt -bf-cbc

На запрос ввода ключа надо ввести тот ключ, который был введён при шифровании.
Если вы хотите сжать данные, то делать это надо, по понятным причинам, перед шифрованием.
Теперь давайте разберёмся с опциями командной строки. Опция -e указывает на то, что файл необходимо шифровать (эта опция включена по умолчанию), а опция -d расшифровывать. Ключ для шифрования можно ввести при вызове openssl enc с помощью опции -k, или в файле с помощью опции -kfile.
С помощью опции -nosalt можно отключить использование salt при шифровании (не рекомендуется так как понижает защищённость шифра).
С помощью этой утилиты также можно выполнять преобразование в base64 и обратно, но это преобразование не есть шифрованием. Детальнее читайте на сайте проекта — http://www.openssl.org/docs/apps/enc.html . Если есть какие-то вопросы спрашивайте.

P.S. После того как зашифровали информацию, необходимо правильно удалить первоначальный файл что-бы не осталось никакой остаточной информации . Для этого можете воспользоваться какой-нибудь программой которая реализует метод Гутмана . Также если вы вводите пароль в командной строке убедитесь что он не сохранился в истории, а если он читается из файла тогда что он был полностью удалён.

Понравилось? Лайкни нас на Facebook