在 C++ 中通过 cryptoapi 加密大文件

encrypting a large file by cryptoapi in C++

我正在使用 CryptoApi 加密文件(非对称加密)。一切正常,但是当文件很大时,它无法加密。我搜索了一下,发现必须逐块加密。除了最后一个块,CryptEncrypt 函数中的 Final 标志必须为 false。

我知道以上所有的概念,但我不知道如何实现它们。我的意思是我不知道如何逐块读取、加密和写入。 你能给我一个真实的代码示例吗?

更新:

我用的是这个网站的代码:http://blogs.msdn.com/b/alejacma/archive/2008/01/28/how-to-generate-key-pairs-encrypt-and-decrypt-data-with-cryptoapi.aspx

试试这样的:

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++ 文件系统处理的了解还不够,无法为文件末尾编写工作检查,但应该有一个。

我正在为以后会遇到这个问题的程序员写这个解决方案:

在此 link 中展示了如何加密大文件(逐块):

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 中测试。