如何使用具有多个线程的Crypto API加密文件?

时间:2016-05-20 07:22:06

标签: windows visual-c++ aes encryption-symmetric cryptoapi

我正在尝试使用多个线程加密文件,并使用Crypto API / AES256 / CBC模式/ NO IV(初始化向量)。

我将文件分成多个线程。获取文件最后一个块的线程执行CryptEncrypt传递Final为真。

遵循建议的方法here:每个线程都使用重复的密钥。

此外,每个线程以共享读取模式打开源文件,并从分配的偏移量开始读取,保持加密并写入目标文件(再次以共享写入模式打开)作为适当的偏移量。

单线程和多线程的输出文件不一样,哈希不匹配。我做错了什么?

1 个答案:

答案 0 :(得分:1)

你做不到。 IV或链接模式在这里是无关紧要的(虽然一些链接模式允许并行 - 但它将是它的实现)。考虑对以下文本执行加密:

"Block cipher mode of operation"

不知怎的,你这样划分(2个线程):

  • "Block cipher mo"
  • " de of operation"

如何确保它以相同的顺序执行(由OS调度程序执行)?如果将它分为3个线程,则可能是:

  • "Block ciphe"
  • "r mode o"
  • "f operation"

但它可能会执行:

  • "r mode o"
  • "f operation"
  • "Block ciphe"

你可以猜测,最终结果会有所不同!

此外,在CBC模式下,结果取决于之前的结果,mentioned here。在右侧看,CBC不可并行化。