首页 > 解决方案 > 需要从 EVP_sha256() 中释放 EVP_MD*?

问题描述

我正在使用 OpenSSL 并不太熟悉它。试图用它来解码某人从数据包中的另一种编程语言发送给我的东西。无论如何,信息是用 OpenSSL 编码的,所以我需要用它来解码它。我或多或少地工作,但我担心资源使用情况。

我正在PKCS5_PBKDF2_HMAC()按照加密的方式制作一个digest_key。该函数的参数之一需要调用EVP_sha256(). 在使用这样的函数时,通常我习惯于调用另一个函数来释放内存或句柄。我找不到适合释放返回的句柄/指针的函数。如果这有什么不同,我会从 C++ 调用。

我应该总是在调用EVP_sha256()之前调用PKCS5_PBKDF2_HMAC(),还是应该在 C++ 中使用静态变量以便它只被调用一次?我是否必须担心重复调用它会耗尽内存,还是它总是返回一个指向只分配一次的东西的指针?

... 10 分钟过去了...

好的,我只是看了一下源代码。它返回一个指向已经静态分配的东西的指针,所以看来我不需要担心清理它?

标签: openssl

解决方案


没有必要EVP_sha256()从任何其他类似函数中释放返回值,这些函数返回一个“const”指针到 anEVP_MDEVP_CIPHER。在即将到来的 OpenSSL 3.0 中,有一些函数返回非 const 指针(EVP_MD_fetch()EVP_CIPHER_fetch())。如果您使用的是 OpenSSL 3.0,并开始使用这些功能,那么您将不得不释放它们。


推荐阅读