OpenSSL: простое шифрование файлов с использованием пароля
Jun 22, 2017 08:32 · 344 words · 2 minute read
Полным-полно ситуаций, когда просто необходимо зашифровать некие файлы или каталоги, особенно если данные передаются по открытым каналам либо храняются на внешнем хранилище (в том числе на облачных). Для решения этой задачи может быть использован OpenSSL — мощный набор инструментов для шифрования файлов и сообщений.
Давайте разберемся, как шифровать и расшифровывать файлы с помощью пароля из командной строки Linux используя OpenSSL!
Чтобы использовать один и тот же пароль как для шифрования файлов, так и для их последующего расшифровывания, тогда необходимо использовать алгоритм симметричного шифрования.
Для шифрования данных используется команда:
openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc
Здесь:
openssl
— утилита командной строки;enc
— использовать алгоритм симметричного шифрования;-aes-256-cbc
— использовать алгоритм AES с длиной ключа 256 бит;-salt
— «соль» для увеличения стойкости шифрования (обязательна при использовании пароля);-in file.txt
— входной файл для шифрования;-out file.txt.enc
— выходной (зашифрованный) файл.
Примечание. По умолчанию, пользователю предлагается вводить пароль в интерактивном режиме.
Для расшифровки данных нужно использовать:
openssl enc -aes-256-cbc -d -in file.txt.enc -out file.txt
Здесь:
openssl
— утилита командной строки;enc
— использовать алгоритм симметричного шифрования;-aes-256-cbc
— использовать алгоритм AES с длиной ключа 256 бит;-d
— расшифровать (decrypt
);-in file.txt.enc
— входной (зашифрованный) файл;-out file.txt
— выходной (расшифрованный) файл.
Но выполнять шифрование файлов в ручном режиме не совсем удобно — хочется все «обернуть» в bash-скрипт, который будет шифровать нужные данные. А чтобы не вводить пароль, который используется при шифровании/расшифровке, можно использовать дополнительную опцию -pass
или -k
:
openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc -k PASS
Сам скрипт может выглядеть, например, так:
#!/bin/bash
#
# Скрипт выполняет шифрование архива с системными файлами, после чего исходный архив удаляется
#
BKPDIR="/mnt/backup"
PASS=`cat /root/.pass`
ARCHIVE=`ls $BKPDIR | grep 'enc.*.tar.xz$'`
if [ -z $ARCHIVE ]; then
echo "No such ARCHIVE, variable empty";
exit;
else
openssl enc -aes-256-cbc -salt -pass pass:$PASS -in $BKPDIR/$ARCHIVE -out $BKPDIR/$ARCHIVE.enc
rm -f $BKPDIR/$ARCHIVE
fi
Примечание. Главное не потерять пароль, с которым шифровался файл, иначе расшифровать его не получится.
И да, хранить пароль в файле /root/.pass
небезопасно, используюте данный скрипт на свой страх и риск или используйте шифрование с открытым ключом.