首页 > 解决方案 > 如何在 OpenSSL 中找到 EVP_MD、EVP_MD_CT 等的定义?

问题描述

我正在使用 OpenSSL。我想使用HMAC算法计算消息的 mac。HMAC的定义如下:

unsigned char *HMAC(const EVP_MD *evp_md, const void *key,
                     int key_len, const unsigned char *d, int n,
                     unsigned char *md, unsigned int *md_len);

现在,我发现 HMAC 的第一个参数是EVP_MD。我注意到很多函数都返回这个参数。我在哪里可以找到 EVP_MD 在其参考或源代码中的内容。

 const EVP_MD *EVP_md_null(void);
 const EVP_MD *EVP_md2(void);
 const EVP_MD *EVP_md5(void);
 const EVP_MD *EVP_sha(void);
 const EVP_MD *EVP_sha1(void);
 const EVP_MD *EVP_dss(void);
 const EVP_MD *EVP_dss1(void);
 const EVP_MD *EVP_mdc2(void);
 const EVP_MD *EVP_ripemd160(void);

 const EVP_MD *EVP_sha224(void);
 const EVP_MD *EVP_sha256(void);
 const EVP_MD *EVP_sha384(void);
 const EVP_MD *EVP_sha512(void);

EVP_MD 和 EVP_MD_CTX 之间有什么关系?

标签: copensslhmac

解决方案


EVP_MD结构包含散列算法的描述。您列出的函数返回指向特定哈希的这些结构之一的指针。您可以将其中一个作为第一个参数传递给HASH.

例如,如果您想使用 SHA256 进行散列,您可以调用EVP_sha256并将其返回值传递给HASH.


推荐阅读