OpenSSL编译报错‘EVP_KDF’未声明 HKDF官方示例代码无法正常编译
问题根因
你使用的EVP_KDF系列API是OpenSSL 3.0及以上版本才新增的公共KDF抽象接口,当前系统中安装的OpenSSL版本为1.1.1或更早版本,头文件中没有定义相关类型和函数,因此编译报错。
你可以通过openssl version命令确认当前系统的OpenSSL版本。
解决方案
提供两种可选方案:
方案1:升级OpenSSL到3.0+版本
- 安装OpenSSL 3.0或更高版本,如果是自定义路径安装,编译时需要指定头文件和库文件路径,示例命令如下(假设OpenSSL3安装在
/usr/local/openssl3路径下):g++ test.cpp -g -I/usr/local/openssl3/include -L/usr/local/openssl3/lib -lssl -lcrypto - 运行时如果动态库找不到,可以临时添加库路径:
export LD_LIBRARY_PATH=/usr/local/openssl3/lib:$LD_LIBRARY_PATH
方案2:使用低版本兼容的HKDF接口(无需升级OpenSSL)
OpenSSL 1.1.0及以上版本自带了直接调用HKDF的函数,不需要用EVP_KDF抽象层,替换代码即可,示例如下:
#include <openssl/evp.h> #include <openssl/kdf.h> #include <string.h> unsigned char out[10]; if (HKDF(out, sizeof(out), EVP_sha256(), (const unsigned char *)"secret", 6, (const unsigned char *)"salt", 4, (const unsigned char *)"label", 5) != 1) { error("HKDF 运算失败"); }
该接口直接完成HKDF的extract+expand全流程,和你提供的官方示例代码输出结果完全一致。
内容的提问来源于stack exchange,提问作者quasimodo
相关产品推荐
相关产品推荐

