我在我的程序中使用Open SSL来使用AES密码对数据进行加密和解密。目前存在一些内存泄漏问题,因此我正在寻找解决方法。在我的加密解密例程中,我已经像这样释放了上下文。
EVP_CIPHER_CTX_free(ctx);
创建者:
EVP_CIPHER_CTX_new
这个例子出现在 OpenSSL 维基页面的 示例 中。
但是!在 MAN 页面上,建议使用 EVP_CIPHER_CTX_cleanup
和 EVP_CIPHER_CTX_init
函数。所以应该使用什么才是正确的,EVP_CIPHER_CTX_new
/EVP_CIPHER_CTX_free
是否已经过时了?EVP_CIPHER_CTX_new
/EVP_CIPHER_CTX_free
和 EVP_CIPHER_CTX_init
/ EVP_CIPHER_CTX_cleanup
之间有什么重大区别吗?
if(!(ctx = EVP_CIPHER_CTX_new())) return -1;
if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
{
EVP_CIPHER_CTX_free(ctx);
return -1;
}
if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len))
{
EVP_CIPHER_CTX_free(ctx);
return -1;
}
ciphertext_len = len;
if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) { EVP_CIPHER_CTX_free(ctx); return -1; }
ciphertext_len += len;
EVP_CIPHER_CTX_free(ctx);