使用openssl解密不好,但明文看起来很好

时间:2017-05-30 09:52:37

标签: c++ qt encryption openssl

我遇到了解密例程的问题,即它似乎在大部分时间都有效,但并非一直都有效。

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;
}

此时,我收到了一个错误的解密错误。没有其他任何东西可以让我知道这个错误究竟意味着什么。这意味着什么?

0 个答案:

没有答案