微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AES IV通过FileSource和FileSink进入文件

如何解决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));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。