- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用下面的代码来解密一个文件:
FileSource fe(fileUrl.c_str(), false,
new AuthenticatedDecryptionFilter(decryptor, new FileSink(
std::string(fileUrl).c_str()), CryptoPP::AuthenticatedDecryptionFilter::THROW_EXCEPTION | CryptoPP::AuthenticatedDecryptionFilter::MAC_AT_END ));
size_t BLOCK_SIZE = 16384;
while (remaining && !fe.SourceExhausted()) {
const unsigned int req = STDMIN(remaining, BLOCK_SIZE);
fe.Pump(req);
fe.Flush(false);
remaining -= req;
}
fe.MessageEnd();
如果我尝试在没有 fe.MessageEnd() 的情况下执行此操作,我的解密文件将短 16 个字节。所以我想我需要调用 MessageEnd() 来解决这个问题。但是如果我调用 MessageEnd() 我得到以下异常:BufferedTransformation:这个对象不允许输入
最佳答案
if i call MessageEnd() I get Follwing Exception:
BufferedTransformation: this object doesn't allow input
...
正确。 FileSource
是一个来源,消息必须存在。您不能在源上调用 Put
或 Put2
来向消息中添加其他数据。
我认为您有两种选择来更好地控制信号。
第一个
在 Source
上调用 Flush
。
const int opts = AuthenticatedDecryptionFilter::THROW_EXCEPTION |
AuthenticatedDecryptionFilter::MAC_AT_END;
FileSource fe(fileUrl.c_str(), false,
new AuthenticatedDecryptionFilter(decryptor, new FileSink(
std::string(fileUrl).c_str()), opts));
fe.Flush(true);
另请参阅 Filter::Flush 上对 Flush
的评论在手册中。
第二
存储指向过滤器的指针并对其调用 MessageEnd
。
const int opts = AuthenticatedDecryptionFilter::THROW_EXCEPTION |
AuthenticatedDecryptionFilter::MAC_AT_END;
AuthenticatedDecryptionFilter* adf = NULL;
FileSource fe(fileUrl.c_str(), false,
adf = new AuthenticatedDecryptionFilter(decryptor, new FileSink(
std::string(fileUrl).c_str()), opts));
adf.MessageEnd();
这有点不寻常,所以我不确定您会遇到什么副作用。
不要删除指针。 FileSource
将在它超出右大括号的范围时将其删除。
... my decrypted file is 16 bytes short...
在我看来,如果对 Source
调用 Flush
对您不起作用,这就是您应该解决的问题。
另请记住...AuthenticatedEncryptionFilter
的输出是二元组 { ciphertext,mac}
,因此由于 MAC,您得到 16 字节的密文扩展。以后使用AuthenticatedDecryptionFilter
时,mac验证通过后就去掉了。因此恢复的文本应该与明文大小相同,两者都应该比密文少 16 个字节。
我不清楚的是,事情是否按预期工作,但您没有意识到它应该如何工作。或者您真的在某处丢失了 16 字节的恢复文本。
关于c++ - Crypto++ 异常调用 messageEnd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35734114/
我使用下面的代码来解密一个文件: FileSource fe(fileUrl.c_str(), false, new AuthenticatedDecryption
我是一名优秀的程序员,十分优秀!