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

如何通过OpenSSL C API读取字节数组中DER格式的椭圆曲线公钥

读取内存中DER格式椭圆曲线公钥的OpenSSL C API

你需要的核心函数是d2i_EC_PUBKEY(),该函数专门用于从已加载到内存的字节数组中,解析DER编码的椭圆曲线公钥,完全匹配你通过命令生成的public.der文件格式。

基础使用示例

首先确保你已经将public.der的全部内容读入字节数组der_buf,数组长度为der_len,参考代码如下:

#include <openssl/ec.h>
#include <openssl/err.h>

int main() {
    // 假设你已经完成公钥文件读取,der_buf为字节数组首地址,der_len为字节长度
    const unsigned char *temp_buf = der_buf; // 用临时指针避免修改原数组指针
    EC_KEY *pub_key = d2i_EC_PUBKEY(NULL, &temp_buf, der_len);
    if (pub_key == NULL) {
        // 解析失败时打印错误信息
        ERR_print_errors_fp(stderr);
        return -1;
    }

    // 此处可正常使用解析好的公钥做验签等操作

    // 用完必须释放资源
    EC_KEY_free(pub_key);
    return 0;
}

注意事项

  • 函数第二个参数是二级指针,内部解析时会移动指针指向,如果你后续还需要用到原der_buf指针,一定要像示例一样传入临时指针的地址,避免原指针被修改
  • 只要你的DER公钥本身是合法的,解析得到的EC_KEY结构会自动匹配prime256v1的曲线参数,不需要额外手动设置
  • 如果你使用的是OpenSSL 3.0及以上版本,推荐使用更通用的EVP_PKEY系列接口,对应函数为d2i_PUBKEY_ex(),示例:
#include <openssl/evp.h>

// 解析逻辑
const unsigned char *temp_buf = der_buf;
EVP_PKEY *pub_key = d2i_PUBKEY_ex(NULL, &temp_buf, der_len, EVP_PKEY_EC, NULL);
// 释放逻辑
EVP_PKEY_free(pub_key);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:45:03