【发布时间】:2014-12-08 07:46:40
【问题描述】:
我在我的程序中使用 Open SSL,使用 aes 密码加密和解密数据。目前有一点内存泄漏,所以我正在寻找一种方法来解决这个问题。在我的加密解密例程中,我有这样的免费上下文
EVP_CIPHER_CTX_free(ctx);
创建者:
EVP_CIPHER_CTX_new
这是在 examples 的 OpenSSL wiki 页面上
但是!在 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);
【问题讨论】:
标签: c encryption openssl aes