使用 OpenSSL 库获取 SM2 公钥 (C 语言)
#include <openssl/ec.h> #include <openssl/evp.h> #include <openssl/bn.h> #include <openssl/objects.h>
int main() { // 生成 SM2 密钥对 EC_KEY *ec_key = EC_KEY_new_by_curve_name(NID_sm2); EC_KEY_generate_key(ec_key);
// 获取公钥
const EC_GROUP *group = EC_KEY_get0_group(ec_key);
const EC_POINT *point = EC_KEY_get0_public_key(ec_key);
// 将公钥编码为 DER 格式
int len = i2o_ECPublicKey(point, NULL);
unsigned char *der = (unsigned char*)malloc(len);
i2o_ECPublicKey(point, &der);
// 输出公钥
printf("SM2 Public Key:\n");
for (int i = 0; i < len; i++) {
printf("%02x", der[i]);
}
printf("\n");
// 释放资源
free(der);
EC_KEY_free(ec_key);
return 0;
}
这段代码首先生成了一个 SM2 密钥对,然后获取了公钥,并将其编码为 DER 格式。最后输出了公钥的十六进制表示。需要注意的是,这里的公钥是未经压缩的形式,如果需要压缩,可以使用 EC_POINT_point2oct 函数。
原文地址: https://www.cveoy.top/t/topic/nqKM 著作权归作者所有。请勿转载和采集!