Шифрование Файлов с Помощью Пароля Используя OpenSSL

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

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

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

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

$ 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

8 Replies to “Шифрование Файлов с Помощью Пароля Используя OpenSSL”

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

    I have used the last command line to decrypt a file but my lecturer hinted that I need to use a parameter related to encoding. What is it? The code is base64.

    1. if I understand your question correctly you need to add -a to your command for input in base64 format

  2. Thanks! That was super helpful.

  3. with -k password it is showing «error in input file»

  4. im trying to decrypt without specifying the file name as i want to do a whole folder and decrypt an encrypted folder via bash script.

  5. it gives an error message
    error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:

  6. Help would be appreciated!

    I encrypted a .dmg file using openssl encryption on my Macbook Pro, keeping the output name the same as the input name. I didn’t know this would be problematic, as I am now unable to decrypt the .dmg file even with the correct password.

    Some folks say it could not be done, but it seemed to have worked for me. Now, I can’t open the file and am afraid it will be impossible to decrypt.

    Note: If I use the same code, but change the output name, it can decrypt just fine. My issue was that I encrypted the file using the same output name as the input, which has made it impossible for me to decrypt it.

    Here’s what the code looks like:
    openssl enc -aes-256-cbc -d -in /Users/huntert/Desktop/IMPT.dmg -out /Users/huntert/Desktop/IMPT.dmg
    enter aes-256-cbc encryption password:
    Verifying — enter aes-256-cbc encryption password:

    When I tried to decrypt it, I received the folllowing messages:
    enter aes-256-cbc decryption password:
    error reading input file

    I should’ve been more cautious and tried it on a rubbish file. Lesson learned.

  7. Hello, the option to give the password is
    -pass pass:
    or
    -pass file:
    works for ecoding & decoding

Добавить комментарий