2017-04-26 48 views
1

我想解密在CBC_Mode中使用AES加密的字符串。我在结果中看到正确的数据,但它被填充字节污染。 我第一次尝试使用重定向的建议在this螺纹:std :: string的解密有额外的填充字节?

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&) 
    { } 
} 

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

回答

1

好吧,最后我发现了我的愚蠢错误。它与填充字节无关。在解密结果中添加这些额外字节的原因很简单,就是 StringSource将结果字节附加到目标。我忘了清除我的目标变量,所以它在...