我有这样的代码来尝试解密:
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。我搜索了却什么也没找到。有人知道我为什么会犯这个错误吗?我在互联网上找到的每一个例子都是这样的,他们都没有提到这个错误。
发布于 2013-09-25 13:09:20
看起来你的密码文本是十六进制编码的。您需要向解密流添加一个HexDecoder:
CryptoPP::StringSource ss(ciphertext, true,
new CryptoPP::HexDecoder(
new CryptoPP::StreamTransformationFilter( decryptor,
new CryptoPP::StringSink( decryptedtext ) ) ) );发布于 2013-09-22 15:54:09
根据我的经验,我认为这是因为你没有正确地创建你的钥匙:
byte* key_s = (byte*)"essasenhaehfraca";
SecByteBlock key( key_s, AES::DEFAULT_KEYLENGTH );在那之后:
ECB_Mode< AES >::Decryption d;
d.SetKey( key, key.size() );https://stackoverflow.com/questions/18945622
复制相似问题