You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:39:04