如何解决AES IV通过FileSource和FileSink进入文件
我需要使用crypto ++加密大文件(多GB)。我设法在帮助我创建以下2个函数的文档中找到一个示例:
bbuser.id
这很好。在8 GB的文件上,我使用的内存很少。 但是正如您所看到的,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 举报,一经查实,本站将立刻删除。