【问题标题】:encrypting a large file by cryptoapi in C++在 C++ 中通过 cryptoapi 加密大文件
【发布时间】:2016-01-04 03:24:26
【问题描述】:

我正在使用 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

【问题讨论】:

  • 您能否展示一些有关如何加密小文件的代码?还可以链接到 API 文档。
  • @AidanGomez 第一篇更新了

标签: c++ file encryption cryptoapi


【解决方案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

两者都在 win 7 中测试。

【讨论】:

    【解决方案2】:

    尝试类似:

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

    【讨论】:

      猜你喜欢
      • 2014-10-14
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 2015-02-09
      • 2013-08-03
      • 1970-01-01
      • 2011-10-15
      • 2017-07-18
      相关资源
      最近更新 更多