AES解密和'invalid pkcs #7 block padding'

AES decryption and 'invalid pkcs #7 block padding'

本文关键字:block padding pkcs invalid 解密 AES      更新时间:2023-10-16

我有这段代码来尝试解密:

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: invalid pkcs #7 block padding found .我搜索了一下,什么也没找到。有人知道为什么我会收到此错误吗?我在互联网上找到的每个示例都是以相同的方式,并且没有一个提到此错误。

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

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

根据我的经验,我认为这是因为您没有正确创建密钥:

byte* key_s = (byte*)"essasenhaehfraca";
SecByteBlock key( key_s, AES::DEFAULT_KEYLENGTH );

之后:

ECB_Mode< AES >::Decryption d;
d.SetKey( key, key.size() );