AES IV通过FileSource和FileSink进入文件

问题描述

我需要使用crypto ++加密大文件(多GB)。我设法在帮助我创建以下2个函数的文档中找到一个示例:

bbuser.id

这很好。在8 GB的文件上,我使用的内存很少。 但是正如您所看到的,IV是(暂时为空)硬编码,我想:

  • 加密时,将其放在文件末尾。
  • 解密时:从文件获取IV,以启动解密器。

有没有办法用crypto ++做到这一点,还是应该在加密/解密过程之后/之前手动处理?

解决方法

感谢所有不同的评论,这是我设法做到的。根据{{​​3}}的建议,我将iv放在文件的开头:

所以在开始加密之前,我将iv放在文件的开头:

CryptoPP::ArraySource(iv,sizeof(iv),true,new CryptoPP::Redirector(sink)
);
// Encrypt

然后在解密时,我会像这样返回IV:

unsigned char iv[CryptoPP::AES::BLOCKSIZE];
CryptoPP::ArraySink ivSink(iv,sizeof(iv));
source.Attach(new CryptoPP::Redirector(ivSink));
source.Pump(CryptoPP::AES::BLOCKSIZE);
// Decrypt

给以后的读者的注意:不要在我的OP中使用空的show之类的IV,而是随机生成一个,例如:

CryptoPP::AutoSeededRandomPool prng;
unsigned char iv[CryptoPP::AES::BLOCKSIZE];
prng.GenerateBlock(iv,sizeof(iv));