Tendo problemas para descriptografar um texto cifrado bem formado usando o Crypto ++
Estou lutando para descriptografar um texto cifrado aparentemente bem formado há cerca de um dia. Suponha que temos o seguinte texto codificado em hexadecimal, que contém exatamente 160 caracteres e, portanto, 80 bytes.
QString c = "1BFAC407AF0D440A2D6176C0B5D125AA96088490299AC18C74623C0EF1BB1372E554FC4150A8066220E943697BE2491D8AE13AA036B298425AC510A8A917D59EBB69708B9040AB3A84C63043EAD4AB07";
QString k = CryptoUtils::hexEncode("abc");
QString p = CryptoUtils::decrypt(c, k);
qDebug() << p;
Desde que esteja usando o AES 256, AFAIK, a chave deve ter 32 bytes de comprimento e texto cifrado com um comprimento de múltiplos de 16 bytes, que todas essas condições são atendidas em relação ao meu código de trecho.
Observe que estou usando a alimentação SHA256 com uma frase secreta para gerar uma chave de 32 bytes. Portanto, isso garante que todas as chaves tenham 32 bytes de comprimento.
Códigos-fonte completos dessas funções podem ser encontradas no meu repositório no GitHub (no ramo Part1).
Minha perguntaQuando quero executar esse código, meu aplicativo falha. Aqui está a exceção:
terminate called after throwing an instance of 'CryptoPP::InvalidCiphertext'
what(): StreamTransformationFilter: invalid PKCS #7 block padding found
The program has unexpectedly finished.
Eu pesquisei sobre esse problema e descobri que poderia ser por causa da fuga\0
depois de criptografar o texto sem formatação. No entanto, não consegui apenas resolver o problema. Por favor, me ajude, isso está me deixando louco.