Tendo problemas para descriptografar um texto cifrado bem formado usando o Crypto ++

fundo

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 pergunta

Quando 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.

questionAnswers(2)

yourAnswerToTheQuestion