我正在尝试解密先使用Zlib压缩然后使用AES / GCM加密的数据。我遇到的问题是我的程序最初运行良好。
当我使用调试器逐步调试它时,Zlib解压缩器实际上完美地放大了所有数据。更重要的是,当我查看缓冲区中的膨胀数据时,它拥有所有数据。当我放入MessageEnd时,麻烦就来了。当我执行MessageEnd时,它将队列的最后一部分放入HashVerificationFilter中,然后引发HashVerificationFailed异常。
出于我的目的,我根本不需要检查数据的完整性,只需要在膨胀缓冲区中保存数据即可。问题是,膨胀的缓冲区是一个受保护的变量,我不想修改Crypto ++以满足我的需要。我正在寻找一种方法1.从ZlibDecompressor中提取当前的膨胀缓冲区,或者2.完全禁用哈希验证。
这是我的代码:
CryptoPP::GCM<CryptoPP::AES>::Decryption gcmDecryption;
gcmDecryption.SetKeyWithIV(key, sizeof(key), iv, 12);
CryptoPP::ZlibDecompressor* inflator = new CryptoPP::ZlibDecompressor(new CryptoPP::StringSink(decryptedtext));
CryptoPP::AuthenticatedDecryptionFilter df(gcmDecryption, inflator);
df.Put(rawData, sizeof(rawData));
df.MessageEnd(); // Exception thrown in this call