Как расшифровать файл с помощью cryptoarm

Обновлено: 08.07.2024

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

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

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

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

Интересный факт: 256-битный AES — это то, что правительство США использует для шифрования информации на уровне «Совершенно секретно».

Предупреждение. Параметр -salt следует использовать ВСЕГДА, если ключ создается на основе пароля.

Без параметра -salt можно выполнять эффективные атаки по словарю на пароль и атаковать данные, зашифрованные с помощью потокового шифра.

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

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

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

Параметры Описание
openssl Инструмент командной строки OpenSSL
enc Кодирование с помощью шифров
-aes-256-cbc используемый шифр шифрования
-salt Увеличивает надежность шифрования
-in< /td> Указывает входной файл
-out Указывает выходной файл.
Параметры Описание
-d Расшифровывает данные
-in Указывает данные для расшифровки
-out Указывает файл поместить расшифрованные данные в

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

По умолчанию зашифрованный файл имеет двоичный формат.

Если вы собираетесь отправить его по электронной почте, IRC и т. д., вам необходимо сохранить зашифрованный файл в кодировке Base64.

Полезный совет. Хотите защитить свои личные данные? Создайте защищенный паролем ZIP-файл из командной строки Linux. Действительно легко! Читать далее →

Чтобы зашифровать файл в кодировке Base64, вы должны добавить опцию -a:

Опция Описание
-a Сообщает OpenSSL, что зашифрованные данные находятся в кодировке Base64

Опция -a также должна быть добавлена ​​при расшифровке:

Неинтерактивное шифрование и дешифрование

Предупреждение. Поскольку пароль виден, эту форму следует использовать только там, где безопасность не важна.

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

Если вы создаете сценарий BASH, вы можете установить пароль неинтерактивным способом, используя параметр -k.

Полезный совет. Нужно повысить безопасность системы Linux? Зашифруйте DNS-трафик и получите защиту от спуфинга DNS! Читать далее →

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

Зашифровать файл с помощью предоставленного пароля:

Расшифровать файл с помощью предоставленного пароля:

20 ответов на вопрос «Шифровать и расшифровывать файлы с помощью пароля с помощью OpenSSL»

Я использовал последнюю командную строку для расшифровки файла, но мой лектор намекнул, что мне нужно использовать параметр, связанный с кодировкой. Что это такое? Код base64.

если я правильно понял ваш вопрос, вам нужно добавить -a к вашей команде для ввода в формате base64

Спасибо! Это было очень полезно.

с паролем -k показывает "ошибка во входном файле"

синтаксис для расшифровки сообщения

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

выдает сообщение об ошибке
error:20074002:BIO подпрограммы:FILE_CTRL:system lib:bss_file.c:400:

Мы будем признательны за помощь!

Я зашифровал файл .dmg с помощью шифрования openssl на своем Macbook Pro, сохранив имя вывода таким же, как и имя ввода. Я не знал, что это может быть проблематично, так как теперь я не могу расшифровать файл .dmg даже с правильным паролем.

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

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

Вот как выглядит код:
openssl enc -aes-256-cbc -d -in /Users/huntert/Desktop/IMPT.dmg -out /Users/huntert/Desktop/IMPT.dmg
введите пароль шифрования aes-256-cbc:
Подтверждение — введите пароль шифрования aes-256-cbc:

Когда я попытался его расшифровать, я получил следующие сообщения:
введите пароль для расшифровки aes-256-cbc:
ошибка чтения входного файла

Мне нужно было быть осторожнее и попробовать на мусорном файле. Усвоенный урок.

Здравствуйте, пароль можно указать
-pass pass:
или
-pass file:
работает для кодирования и декодирования

привет,
У меня проблема с расшифровкой файла
Я зашифровал свой файл после того, как использовал этот файл в Matlab (модуляция ..), а затем не могу расшифровать извлеченный файл из Matlab
ошибка "ошибка чтения файла"
что мне делать?

привет,
спасибо за это, очень полезно.
Одна вещь, которую я спрашиваю, где я могу получить openssl (я полагаю, исполняемый файл) для запуска шифрования и расшифровки?
Нил

Привет, как дела? У меня есть зашифрованный файл, к которому я забыл пароль, это файл (.evp), какой командной строкой мне воспользоваться, чтобы его расшифровать?

Я пытаюсь выяснить, можно ли расшифровать каталог с закрытым сертификатом с открытым SSL.
Если вам нужно решение, я здесь
Спасибо
Кертис

Здравствуйте! Спасибо за эту статью.
Но как это сделать программно? У меня возникла ситуация, когда мне нужно использовать пароль для программного входа на сервер. Мы не можем жестко запрограммировать пароль для расшифровки файла. Я знаю один вариант — хранить пароль в хранилище, но это слишком долго/дорого для реализации. Пожалуйста, предложите. спасибо

Вот пример кода в GNU-C:

Можно ли узнать, какая длина ключа использовалась в зашифрованном файле?

Счетчик итераций относится к алгоритму хеширования PBKDF2, который значительно усложняет взлом паролей. Использование небольшого количества итераций, например 29, не очень полезно. Счетчик должен быть максимально большим, чтобы он не стал слишком раздражающим (от 1 до 2 секунд итерации). Текущее значение по умолчанию 10000 слишком мало, даже когда оно было выпущено! Лучше 500000 или выше.

Как вы можете видеть, полученный текст разделен между «X» и «T», поэтому в файле .txt есть 2 последовательности, и команда расшифровки не работает: «ошибка чтения входного файла».
1. FsdGVkX19hus8SHsZ2WKpla8jAjyHi+bFpu77cy15vtKCR5ZNtTLat9/CSEnmX
2. Ti52Oh5sGthW/OVaE0aNxw==

Есть ли решение без потери ресурса openssl в моем скрипте? Спасибо.

КЛАРК, вы можете обрезать пробелы:
$ echo -n ‘секрет, который вы хотите зашифровать’ | openssl enc -aes-256-cbc -iter 1666 -a -salt -pbkdf2 | база64 | tr -d ‘[:space:]’
введите пароль шифрования aes-256-cbc:
Подтверждение — введите пароль шифрования aes-256-cbc:
VTJGc2RHVmtYMS83azBCc0lFc096YktqdTdTTWtGaFJYR3NOU0tTbFZQcTJVa0lHRTFsY0w3a0lHZW04d

Расшифровка — это операция, обратная шифрованию. Для шифрования с секретным ключом вы должны знать и ключ, и IV, которые использовались для шифрования данных. Для шифрования с открытым ключом необходимо знать либо открытый ключ (если данные были зашифрованы с помощью закрытого ключа), либо закрытый ключ (если данные были зашифрованы с помощью открытого ключа).

Симметричное дешифрование

В следующем примере показано, как создать новый экземпляр класса реализации по умолчанию для алгоритма Aes. Экземпляр используется для дешифрования объекта CryptoStream. В этом примере сначала создается новый экземпляр класса реализации Aes. Он считывает значение вектора инициализации (IV) из переменной управляемого потока, fileStream . Затем он создает экземпляр объекта CryptoStream и инициализирует его значением экземпляра fileStream. Методу SymmetricAlgorithm.CreateDecryptor из экземпляра Aes передается значение IV и тот же ключ, который использовался для шифрования.

В следующем примере показан весь процесс создания потока, расшифровки потока, чтения из потока и закрытия потоков. Создается объект файлового потока, который считывает файл с именем TestData.txt. Затем файловый поток расшифровывается с использованием класса CryptoStream и класса Aes. В этом примере указывается значение ключа, которое используется в примере симметричного шифрования для шифрования данных. Он не показывает код, необходимый для шифрования и передачи этих значений.

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

Асимметричное дешифрование

Обычно сторона (сторона А) создает как открытый, так и закрытый ключ и сохраняет ключ либо в памяти, либо в контейнере криптографического ключа. Затем сторона А отправляет открытый ключ другой стороне (стороне Б). Используя открытый ключ, сторона B шифрует данные и отправляет данные обратно стороне A. Получив данные, сторона A расшифровывает их, используя соответствующий закрытый ключ. Расшифровка будет успешной только в том случае, если сторона А использует закрытый ключ, который соответствует открытому ключу стороны Б, использованному для шифрования данных.

Информацию о том, как сохранить асимметричный ключ в безопасном контейнере криптографических ключей и как впоследствии получить асимметричный ключ, см. в разделе Практическое руководство. Хранение асимметричных ключей в контейнере ключей.

Следующий пример иллюстрирует расшифровку двух массивов байтов, представляющих симметричный ключ и IV. Информацию о том, как извлечь асимметричный открытый ключ из объекта RSA в формате, который можно легко отправить третьей стороне, см. в разделе Шифрование данных.

При шифровании файла исходный файл не удаляется и не изменяется. Выходной файл зашифрован.

Решения распространенных ошибок, связанных с командой encrypt, см. в разделе, следующем за примерами.

Примечание. При шифровании и расшифровке файлов по возможности старайтесь использовать одобренные FIPS алгоритмы с утвержденными длинами ключей. См. список в Алгоритмы FIPS 140 в криптографической среде в разделе Использование системы с поддержкой FIPS 140 в Oracle Solaris 11.2 . Запустите команду encrypt -l, чтобы просмотреть доступные алгоритмы и длины их ключей.

  1. Создайте симметричный ключ подходящей длины.

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

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

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

Укажите ключ и используйте алгоритм симметричного ключа с помощью команды encrypt.

Алгоритм, используемый для шифрования файла. Введите алгоритм так, как он появляется в выводе команды encrypt -l. По возможности выбирайте алгоритм, одобренный FIPS, из списка в разделе Алгоритмы FIPS 140 в криптографической структуре раздела Использование системы с поддержкой FIPS 140 в Oracle Solaris 11.2 .

Файл, содержащий ключ заданной алгоритмом длины. Длина ключа для каждого алгоритма указана в битах в выводе команды encrypt -l.

Входной файл, который вы хотите зашифровать. Команда оставляет этот файл без изменений.

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

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

Чтобы расшифровать файл encryptedthisfile, пользователь извлекает ключ по его метке.

Пример 3-9. Шифрование и дешифрование с помощью AES и парольной фразы

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

Входной файл ticket.to.ride по-прежнему существует в исходном виде.

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

Пример 3-10 Шифрование и дешифрование с помощью AES и файла ключа

В следующем примере файл зашифрован с помощью алгоритма AES. В механизмах AES используется ключ длиной 128 бит или 16 байт.

Входной файл ticket.to.ride по-прежнему существует в исходном виде.

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

Устранение неполадок

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

зашифровать: невозможно создать ключ для операции шифрования: CKR_ATTRIBUTE_VALUE_INVALID

зашифровать: не удалось инициализировать операцию шифрования: CKR_KEY_SIZE_RANGE

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

Используйте кодовую фразу. Затем платформа предоставляет ключ, соответствующий требованиям.

Передайте размер ключа, который принимает алгоритм. Например, алгоритм DES требует 64-битного ключа. Для алгоритма 3DES требуется 192-битный ключ.

Пример программы использует ключи AWS KMS для шифрования и расшифровки файла.

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

Для шифрования и расшифровки данных в примере используется известный пакет Python cryptography. Этот пакет не входит в стандартную библиотеку Python и должен быть установлен отдельно, например, с помощью команды pip.

Каждый раздел описывает одну функцию из всего исходного файла примера.

Получить существующий главный ключ¶

Главные ключи создаются, управляются и хранятся в AWS KMS. Главный ключ KMS также называется главным ключом клиента или CMK. За каждый CMK взимается плата за хранение AWS, поэтому один CMK часто используется для управления несколькими ключами данных.

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

Если функция из примера находит нужный CMK, она возвращает как идентификатор CMK, так и его ARN (имя ресурса Amazon). Любой из этих идентификаторов можно использовать для ссылки на CMK при последующих вызовах методов AWS KMS.

Создайте мастер-ключ клиента¶

Если пример не находит существующий CMK, он создает новый и возвращает его идентификатор и ARN.

Создайте ключ данных¶

Для шифрования файла пример функции create_data_key создает ключ данных. Ключ данных управляется клиентом и не требует затрат на хранение AWS. В примере создается ключ данных для каждого зашифрованного файла, но можно использовать один ключ данных для шифрования нескольких файлов.

Пример функции возвращает ключ данных как в виде открытого текста, так и в зашифрованном виде. Форма открытого текста используется для шифрования данных. Зашифрованная форма будет храниться вместе с зашифрованным файлом. Ключ данных связан с ключом CMK, который при необходимости может расшифровать зашифрованный ключ данных.

Зашифровать файл¶

Функция encrypt_file создает ключ данных и использует его для шифрования содержимого файла на диске.

Операция шифрования выполняется объектом Fernet, созданным пакетом cryptography Python.

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

Расшифровать ключ данных¶

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

Расшифровать файл¶

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

Операция дешифрования выполняется объектом Fernet, созданным пакетом Python cryptography.

Читайте также: