我遇到了解密例程的问题,即它似乎在大部分时间都有效,但并非一直都有效。
EVP_CIPHER_CTX ctx;
EVP_CIPHER_CTX_init(&ctx);
//EVP_CIPHER_CTX_set_padding(&ctx, 0);
if(!EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, key, iv))
{
ERROR0(_logger, "Decryption error: " + getSslErrors());
EVP_CIPHER_CTX_cleanup(&ctx);
break;
}
encryptedData = encryptedData.mid(16);
char *input = encryptedData.data();
int len = encryptedData.size();
int pLen = len;
int fLen = 0;
uchar* plaintext = (uchar*)malloc(pLen + 16);
if(!EVP_DecryptUpdate(&ctx, plaintext, &pLen, (uchar*)input, len))
{
ERROR0(_logger, "Decryption error: " + getSslErrors());
free(plaintext);
EVP_CIPHER_CTX_cleanup(&ctx);
break;
}
此时,如果我看一下已经解密的明文,它看起来很好,除了最后几个字节丢失...但是,如果我们继续:
if(!EVP_DecryptFinal_ex(&ctx, plaintext+pLen, &fLen))
{
ERROR0(_logger, "Decryption error: " + getSslErrors());
free(plaintext);
EVP_CIPHER_CTX_cleanup(&ctx);
break;
}
此时,我收到了一个错误的解密错误。没有其他任何东西可以让我知道这个错误究竟意味着什么。这意味着什么?