我正在尝试解密在CBC_Mode中使用AES加密的字符串。我在结果中看到正确的数据,但是填充字节污染了数据。
我的第一次尝试是使用this线程中建议的重定向器:

std::string result_;
CryptoPP::CBC_Mode<CryptoPP::AES>::Decryption decrypt_;
...

void decrypt(std::string cipheredText)
{
    try
    {
        CryptoPP::MeterFilter meter(new CryptoPP::StringSink(result_));

        CryptoPP::StringSource pipeline(
            cipheredText,
            true,
            new CryptoPP::StreamTransformationFilter(
                decrypt_,
                new CryptoPP::Redirector(meter),
                CryptoPP::StreamTransformationFilter::PKCS_PADDING));
    }
    catch (CryptoPP::Exception&)
    { }
}

但是我仍然得到这些填充字节。我究竟做错了什么?有人能帮助我吗?

最佳答案

好,终于我发现了自己的愚蠢错误。它与填充字节无关。在我的解密结果中包含这些额外字节的原因仅仅是因为
StringSource将结果字节附加到目标。我忘了清除我的目标变量,所以它不断增加...

关于c++ - 解密std::string有额外的填充字节吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43632120/

10-09 13:35