- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要使用crypto ++加密大文件(多GB)。我设法在帮助我创建以下2个函数的文档中找到一个示例:
bool AESEncryptFile(const std::string& clearfile, const std::string& encfile, const std::string& key) {
try {
byte iv[CryptoPP::AES::BLOCKSIZE] = {};
CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption encryptor;
encryptor.SetKeyWithIV((unsigned char*)key.c_str(), CryptoPP::AES::DEFAULT_KEYLENGTH, iv);
CryptoPP::StreamTransformationFilter filter(encryptor);
CryptoPP::FileSource source(clearfile.c_str(), false);
CryptoPP::FileSink sink(encfile.c_str());
source.Attach(new CryptoPP::Redirector(filter));
filter.Attach(new CryptoPP::Redirector(sink));
const CryptoPP::word64 BLOCK_SIZE = 4096;
CryptoPP::word64 processed = 0;
while (!EndOfFile(source) && !source.SourceExhausted()) {
source.Pump(BLOCK_SIZE);
filter.Flush(false);
processed += BLOCK_SIZE;
}
filter.MessageEnd();
return true;
} catch (const CryptoPP::Exception& ex) {
return false;
}
}
bool AESDecryptFile(const std::string& encfile, const std::string& clearfile, const std::string& key) {
try {
byte iv[CryptoPP::AES::BLOCKSIZE] = {};
CryptoPP::CBC_Mode<CryptoPP::AES>::Decryption decryptor;
decryptor.SetKeyWithIV((unsigned char*)key.c_str(), CryptoPP::AES::DEFAULT_KEYLENGTH, iv);
CryptoPP::StreamTransformationFilter filter(decryptor);
CryptoPP::FileSource source(encfile.c_str(), false);
CryptoPP::FileSink sink(clearfile.c_str());
source.Attach(new CryptoPP::Redirector(filter));
filter.Attach(new CryptoPP::Redirector(sink));
const CryptoPP::word64 BLOCK_SIZE = 4096;
CryptoPP::word64 processed = 0;
while (!EndOfFile(source) && !source.SourceExhausted()) {
source.Pump(BLOCK_SIZE);
filter.Flush(false);
processed += BLOCK_SIZE;
}
.
filter.MessageEnd();
return true;
} catch (const CryptoPP::Exception& ex) {
return false;
}
}
这很好。在8 GB的文件上,我使用的内存很少。
最佳答案
由于所有不同的评论,这就是我设法做到的。如@Sam Mason所建议,我将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));
关于c++ - AES IV通过FileSource和FileSink进入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63738572/
这是我的简单流程图。 文件源>节流>文件接收器 当文件源的重复值打开时,它工作正常。当我关闭文件源的重复值时,不会写入任何内容。这可能是什么原因? 最佳答案 block 之间 GNU Radio 调度
我已经为 appsrc 编写了一个代码到 appsink 并且它可以工作。我看到了实际的缓冲区。它以 H264(vpuenc=avc) 编码。现在我想把它保存在一个文件(filesink)中。我如何处
我正在使用媒体基础框架开发媒体流应用程序。我使用了一些来自互联网和 Anton Polinger 书中的样本。不幸的是,将流保存到 mp4 文件后,文件的元数据已损坏。它有不正确的持续时间(根据我的
我无法通过 rtp 将脉冲音频监视器流式传输到 vlc 或带有 udpsrc 的 gst-launch 之类的音频播放器 此命令有效且文件包含当前正在播放的音频 gst-launch-1.0 -v p
这个有效: gst-launch -e v4l2src ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! tee name=splitte
我有一个使用 C++ 和 QT5.4 编写的 UI 应用程序,我使用 CryptoPP 5.6.2 来加密文件。我遇到了以下问题: 当点击加密按钮时,一个基于this tutorial 的新线程被启动
我正在读取图像,对其进行加密,然后对其进行解密。目标是最终循环并记录完成该过程所需的时间。目前我拥有的是读取文件,然后对其进行加密,加密,然后根据恢复的数据创建另一个文件。我不需要用解密的图片制作另一
我是一名优秀的程序员,十分优秀!