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

时间:2015-10-07 02:53:30

标签: c++ file encryption cryptoapi

我使用CryptoApi加密文件(非对称加密)。 Everywthing还可以,但是当文件很大时,它无法对其进行加密。我搜索并发现我必须逐块加密。除最后一个块外,Final函数中的CryptEncrypt标志必须为false。

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

更新

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

2 个答案:

答案 0 :(得分:1)

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

在此链接中已经显示了如何加密大文件(逐块):

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

在胜利7中都进行了测试。

答案 1 :(得分:0)

尝试类似:

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