c++ - AES解密和 'invalid pkcs #7 block padding'

标签 c++ encryption cryptography crypto++

我有这段代码可以尝试解密:

byte key[AES::DEFAULT_KEYLENGTH];
string key_s = "essasenhaehfraca";

for (int i = 0; i < key_s.size(); i++)
    key[i] = (byte) key_s[i];

string ciphertext = "A506A19333F306AC2C62CBE931963AE7DFCFFA940360A40FFD5DC69B9C2E53AD"
string decryptedtext;

try
{
    ECB_Mode< AES >::Decryption decryptor;
    decryptor.SetKey(key, sizeof(key));
    CryptoPP::StringSource(ciphertext, true,
            new CryptoPP::StreamTransformationFilter( decryptor,
                new CryptoPP::StringSink( decryptedtext )
            )
    );

}
catch(const CryptoPP::Exception& e)
{
    cerr << e.what() << endl;
    system("pause");
    exit(1);
}

return 0;

当我执行它时,我得到异常 StreamTransformationFilter:找到无效的 pkcs #7 block 填充。 我搜索并没有找到任何东西。有人知道为什么我会收到此错误吗?我在互联网上找到的每个示例都是以同样的方式出现,但没有一个提到这个错误。

最佳答案

看起来您的密文是十六进制编码的。您需要将 HexDecoder 添加到您的解密流中:

CryptoPP::StringSource ss(ciphertext, true,
    new CryptoPP::HexDecoder(
        new CryptoPP::StreamTransformationFilter( decryptor,
            new CryptoPP::StringSink( decryptedtext ) ) ) );

关于c++ - AES解密和 'invalid pkcs #7 block padding',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18945622/

相关文章:

c++ - GNU C++ : unique_ptr. h 没有那个文件或目录

c++ - 需要在 C 或 C++ 中为微 Controller 显示驱动程序进行不寻常的字符串连接

具有未定义输入的 C 中的凯撒加密

c# - 什么是 "obfuscate"数值的简单但有些有效的方法?

Android 加密库 FIPS 验证

ios - HMAC SHA256 JWT 签名不正确

c++ - 针对不同操作系统编译C++静态库的建议?

c++ - 包含 NSS 头文件的问题

encryption - RSA 公钥格式

cryptography - 为什么我们需要 Diffie Hellman?