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

OpenSSL 3.0如何获取支持的公钥算法?弃用API替代方案咨询

OpenSSL 3.0 替代EVP_PKEY_meth系列接口获取公钥算法列表的方案

在OpenSSL 3.0中,原有的EVP_PKEY_meth_get_count()、EVP_PKEY_meth_get0()等接口已被弃用,取而代之的是基于Provider架构的新算法遍历体系。你可以使用**EVP_KEYMGMT_do_all_sorted()**来实现类似EVP_CIPHER_do_all_sorted的公钥算法遍历功能。

核心逻辑

OpenSSL 3.0将公钥算法的管理抽象为EVP_KEYMGMT(密钥管理)组件,EVP_KEYMGMT_do_all_sorted()会按名称排序遍历所有已注册的密钥管理算法,每个算法对应一种公钥类型。

代码示例

#include <openssl/evp.h>
#include <openssl/core.h>

// 遍历回调函数:处理每个公钥算法
static int iterate_pkey_algs(const OSSL_ALGORITHM *alg, void *user_data) {
    // alg->algorithm_name 为算法名称(如 "RSA", "EC", "ED25519" 等)
    printf("Supported public key algorithm: %s\n", alg->algorithm_name);
    return 1; // 返回1继续遍历,返回0终止遍历
}

int main(void) {
    // 遍历所有Provider中的公钥算法(NULL表示使用默认Provider集合)
    EVP_KEYMGMT_do_all_sorted(NULL, iterate_pkey_algs, NULL);
    return 0;
}

补充说明

  • 如果需要限定遍历某个特定Provider的算法,可先加载目标Provider并传入其指针作为第一个参数:
    OSSL_PROVIDER *prov = OSSL_PROVIDER_load(NULL, "default");
    if (prov != NULL) {
        EVP_KEYMGMT_do_all_sorted(prov, iterate_pkey_algs, NULL);
        OSSL_PROVIDER_unload(prov);
    }
    
  • OSSL_ALGORITHM结构体的properties字段包含算法属性信息,可用于筛选满足特定条件的算法(如是否支持签名、加密等)。

内容的提问来源于stack exchange,提问作者Nickolay Olshevsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:03:19