шифрование большого файла с помощью cryptoapi на С++

Я использую CryptoApi для шифрования файла (асимметричное шифрование). Все в порядке, но когда файл большой, он не может его зашифровать. Я искал и обнаружил, что должен шифровать блок за блоком. За исключением последнего блока, флаг Final в функции CryptEncrypt должен быть ложным.

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

Обновлять:

Я использовал код этого сайта: http://blogs.msdn.com/b/alejacma/archive/2008/01/28/how-to-generate-key-pairs-encrypt-and-decrypt-data-with-cryptoapi.aspx


person user3864147    schedule 07.10.2015    source источник
comment
Не могли бы вы показать код того, как вы зашифруете небольшой файл? Также ссылка на документацию по API.   -  person Aidan Gomez    schedule 07.10.2015
comment
@AidanGomez Первый пост обновлен   -  person user3864147    schedule 07.10.2015


Ответы (2)


Я пишу это решение для программистов, у которых будет эта проблема в будущем:

В этой ссылке было показано, как зашифровать большой файл (блок за блоком):

https://msdn.microsoft.com/en-us/library/windows/desktop/aa382358%28v=vs.85%29.aspx

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

1) В шифровании размер блока должен быть установлен на 128 - 11 ( DWORD dwBlockLen = 128 - 11 )

2) При расшифровке размер блока должен быть равен 128 ( DWORD dwBlockLen = 128 )

Оба тестировались в Win 7.

person user3864147    schedule 08.10.2015

Попробуйте что-то вроде:

final_flag <- false
repeat
  this_block <- read_next_block(file)
  if (is_EoF(file)) {final_flag <- true }
  encrypt(this_block, final_flag)
until (final_flag == true)

Я недостаточно хорошо разбираюсь в обработке файловой системы C++, чтобы написать рабочую проверку конца файла, но она должна быть где-то там.

person rossum    schedule 07.10.2015