PEM_read_bio_PrivateKey是否存在对应公钥BIO读取等价接口?
OpenSSL通用BIO公钥读取接口说明
你需要的通用公钥BIO读取接口实际是存在的,只是命名和你预期的PEM_read_bio_PublicKey不同,接口名为PEM_read_bio_PUBKEY,它的第一个入参就是BIO指针类型,和PEM_read_bio_PrivateKey的参数逻辑完全对齐,返回通用EVP_PKEY*结构,支持RSA、ECC、SM2等各类算法的公钥读取,不需要调用算法专属的读取函数。
出现这个认知偏差的核心原因是OpenSSL的PEM接口命名规则有特殊约定:
- 通用公钥相关的接口统一用
PUBKEY后缀指代X.509标准SubjectPublicKeyInfo格式的通用公钥,而非PublicKey - 你提到的
PEM_read_PUBKEY就是PEM_read_bio_PUBKEY对应的FILE*版本,两者是一一对应的配套接口,功能完全一致,仅输入源类型不同
示例代码
// 从PEM格式文件通过BIO读取通用公钥 EVP_PKEY *pubkey = NULL; BIO *pub_bio = BIO_new_file("public_key.pem", "r"); if (!pub_bio) { // 错误处理逻辑 } pubkey = PEM_read_bio_PUBKEY(pub_bio, &pubkey, NULL, NULL); BIO_free(pub_bio); // 公钥使用完成后释放资源 if (pubkey) { EVP_PKEY_free(pubkey); }
OpenSSL早期设计接口时,特意区分了算法绑定的公钥格式和通用公钥格式:前者仅存储对应算法的公钥参数、不带算法标识,接口会带算法前缀比如
PEM_read_bio_RSAPublicKey;后者是带算法标识的通用标准格式,用PUBKEY后缀做区分,所以没有用PublicKey作为通用接口的后缀命名。
内容的提问来源于stack exchange,提问作者Sage Gerard
相关产品推荐
相关产品推荐

