首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES解密与“无效pkcs #7块填充”

AES解密与“无效pkcs #7块填充”
EN

Stack Overflow用户
提问于 2013-09-22 15:41:55
回答 2查看 5.4K关注 0票数 1

我有这样的代码来尝试解密:

代码语言:javascript
复制
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。我搜索了却什么也没找到。有人知道我为什么会犯这个错误吗?我在互联网上找到的每一个例子都是这样的,他们都没有提到这个错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-25 13:09:20

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

代码语言:javascript
复制
CryptoPP::StringSource ss(ciphertext, true,
    new CryptoPP::HexDecoder(
        new CryptoPP::StreamTransformationFilter( decryptor,
            new CryptoPP::StringSink( decryptedtext ) ) ) );
票数 8
EN

Stack Overflow用户

发布于 2013-09-22 15:54:09

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

代码语言:javascript
复制
byte* key_s = (byte*)"essasenhaehfraca";
SecByteBlock key( key_s, AES::DEFAULT_KEYLENGTH );

在那之后:

代码语言:javascript
复制
ECB_Mode< AES >::Decryption d;
d.SetKey( key, key.size() );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18945622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档