c - 使用 HMAC() 函数后释放内存吗?

标签 c openssl cryptography

我有以下功能:

static int my_hmac(unsigned char *data, int len, char *password, unsigned char *hmac)
{
    unsigned char* digest;

    digest = HMAC(EVP_sha1(), password, strlen(password), data, len, NULL, NULL);
    memcpy(hmac, digest, 20);
    return 0;
}

我在main()中以这种方式调用它

unsigned char buffer[20]
my_hmac(str, strlen(str), "password", buffer)

使用 HMAC() 函数后我应该调用 libcrypto/libopenssl 的一些空闲内存 api 吗?

最佳答案

既然您标记了您的帖子 openssl,我就假设您正在使用它。

根据documentation ,由于您将 NULL 作为 md (倒数第二个参数)的参数传递,因此结果被放置在静态数组中,因此您无需担心那里的释放。

关于返回值,

HMAC() returns a pointer to the message authentication code or NULL if an error occurred.

此消息验证码不是您拥有的内存,因此您不应尝试释放它。

关于c - 使用 HMAC() 函数后释放内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45085677/

相关文章:

c# - 什么样的 RSASignaturePadding 与 PKCS#8 key 一起使用?

c - 在 C 中解析字节流(嵌入式编程)

c - 将结构添加到列表期间出现 Nullptr 错误

c - 当有错误的命令行参数时,如何使 getopt_long() 不打印任何内容?

c++ - 是否有任何 OpenSSL 函数可以将 PKCS7 文件转换为 PEM

ruby - 访问 Litmus API 会导致 SSL 错误。有什么办法解决吗?

c - 如何有效地仅反转分配矩阵的一部分

c++ - 在 Linux 上使用 QtWebkit 和 OpenSSL 部署 Qt 应用程序时出现问题

java - 无法克服 javax.crypto.BadPaddingException

c++ - 位于字符串加密密码中的断点