c++ - std::string 的解密有额外的填充字节?

标签 c++ aes crypto++ cbc-mode

我正在尝试解密一个在 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/

相关文章:

c++ - 我可以以编程方式访问调用函数的名称吗?

c++ - Linux 编程接口(interface)中的信号处理程序示例

c - 使用 OpenSSL AES 命令行工具和 OpenSSL AES API 时出现不同的密文?

c++ - 在 Crypto++ 中使用 RSA 加密对称 AES key

c++ - 如何循环 Blowfish Crypto++

c++ - 流转换过滤器 : invalid PKCS #7 block padding found in AES decryption

c++ - 为什么我的程序打印垃圾?

java - 有没有办法连续调用 Java 运行时? (不退出 Java 运行时)

python - 使用 PKCS#7 填充的 Python 3 中的 AES-CBC 128、192 和 256 加密解密

c# - 使用.Net Framework 进行AES 文件加密并使用IOS 进行解密