openssl aes256 шифрование файла - PullRequest
5 голосов
/ 18 октября 2011

Я бы хотел зашифровать файл с помощью aes256, используя OpenSSL с C. Я нашел довольно хороший пример здесь .

Должен ли я сначала прочитать весь файл в буфер памятии что делает aes256, или я должен сделать это частично с буфером ~ 16K?

Какие-нибудь фрагменты или подсказки?

Ответы [ 2 ]

7 голосов
/ 18 октября 2011

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

EVP API OpenSSL (который также используется в примере, который вы связали ) имеет функцию EVP_EncryptUpdate, которую можно вызывать несколько раз, каждый раз предоставляя еще несколько байтов для шифрования. Используйте это в цикле вместе с чтением открытого текста из файла в буфер и записью зашифрованного текста в другой файл (или тот же). (Аналогично для расшифровки.)

Конечно, вместо того, чтобы придумывать новый формат файла (который вы фактически делаете здесь), подумайте о реализации формата сообщений OpenPGP ( RFC 4880 ). Существует меньше шансов сделать ошибки, которые могут разрушить вашу безопасность - и в качестве дополнительного бонуса, если ваша программа как-то перестает работать, ваши пользователи всегда могут использовать стандартные инструменты (PGP или GnuPG) для расшифровки файла.

5 голосов
/ 18 октября 2011

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

Я сказал лучше не криптографическим способом :-) В конце не будет никакой разницы (для зашифрованного файла), но ваш компьютер может не захотеть (или даже не иметь возможности)загрузить несколько МБ (или ГБ) в память.

Крипто-операции выполняются в блоке, для AES это 128 бит (16 байтов).Итак, для простоты, вам лучше использовать кратное 16 байтов для вашего буфера.В противном случае выбор за вами. Я бы предложил использовать от 4 до 16 КБ буферов, но, если честно, я бы протестировал несколько значений.

...