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
相关产品推荐
相关产品推荐

