gpt4 book ai didi

c++ - Crypto++ 异常调用 messageEnd

转载 作者:行者123 更新时间:2023-11-30 05:30:54 31 4
gpt4 key购买 nike

我使用下面的代码来解密一个文件:

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 是一个来源,消息必须存在。您不能在源上调用 PutPut2 来向消息中添加其他数据。


我认为您有两种选择来更好地控制信号。

第一个

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com