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

OpenSSL 1.0.0下替代RSA_get0_key提取RSA参数n/e/d的方案问询

OpenSSL 1.0.0版本读取RSA私钥n/e/d参数解决方案

问题原因

RSA_get0_key 是OpenSSL 1.1.0版本才新增的API,1.0.0版本尚未提供该接口,因此编译时会抛出隐式函数声明的告警。
1.0.x系列的OpenSSL中RSA结构体是完全透明的,所有成员直接对外暴露,不需要通过专用Getter函数访问。

修复代码

将你代码中调用RSA_get0_key的行替换为直接读取结构体成员即可:

// 替换原来的 RSA_get0_key(privkey,&n,&e,&d); 行
BIGNUM *n = privkey->n;
BIGNUM *e = privkey->e;
BIGNUM *d = privkey->d;

如果需要代码同时兼容1.0.x和1.1.x及以上版本的OpenSSL,可以增加版本宏分支判断:

#include <openssl/opensslv.h>

// ... 其余代码不变

BIGNUM *n, *e, *d = NULL;
#if OPENSSL_VERSION_NUMBER < 0x10100000L
// 适配1.0.x版本
n = privkey->n;
e = privkey->e;
d = privkey->d;
#else
// 适配1.1.x及以上版本
RSA_get0_key(privkey, &n, &e, &d);
#endif

注意事项

建议补充错误判断逻辑:检查fopen打开私钥文件是否成功、PEM_read_RSAPrivateKey读取私钥是否返回有效指针,避免空指针访问引发崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:24:03