void GetPubKey(const char* FilePath, char* PubKey)
{
unsigned char Cert[];
unsigned char *pTmp = NULL;
FILE *fp = NULL;
fp=fopen(FilePath,“rb”);
if( NULL != fp)
{
X509 *usrCert = NULL; //X509证书结构体,保存用户证书
unsigned long Certlen = ;
Certlen=fread(Cert,,,fp);
fclose(fp);
//判断是否为DER编码的用户证书,并转化为X509结构体
pTmp = Cert;
//usrCert = d2i_X509(NULL,(const unsigned char ** )&pTmp,Certlen); //if( NULL == usrCert)
{
BIO b;
/ 判断是否为PEM格式的数字证书 */
b=BIO_new_file(FilePath,“r”);
PEM_read_bio_X509(b, &usrCert, NULL, NULL);
BIO_free(b);
if(usrCert==NULL)
{
return;
}
}
//保存证书公钥
int derpubkeyLen = ;
EVP_PKEY pubKeytemp = NULL;
pTmp = NULL;
char HexKey = NULL;
//获取证书公钥
pubKeytemp = X509_get_pubkey(usrCert);
if (!pubKeytemp)
return; X509_PUBKEY * pubKeytempss;
pubKeytempss = X509_get_X509_PUBKEY(usrCert);
derpubkeyLen = i2d_PublicKey(pubKeytemp, NULL);
if(derpubkeyLen < )
return; unsigned char* buf = NULL;
buf = (unsigned char*)malloc(derpubkeyLen);
i2d_PublicKey(pubKeytemp,&buf); EC_KEY ec_key = EVP_PKEY_get0_EC_KEY(pubKeytemp);
if (!ec_key)
return;
int buflen = EC_KEY_key2buf(ec_key, EC_KEY_get_conv_form(ec_key),(unsigned char)&pTmp, NULL);
* BIGNUM *pub_key_BIGNUM;
pub_key_BIGNUM = BN_new();
BN_bin2bn(pTmp, buflen, pub_key_BIGNUM);
HexKey = BN_bn2hex(pub_key_BIGNUM);
strcpy(PubKey,HexKey); EVP_PKEY_free(pubKeytemp);
X509_free(usrCert); } }

其中斜体部分也可以利用如下代码替换
EC_POINT pub_key;
unsigned char pubbuf[1024] = { 0 };//公钥数据
pub_key = (EC_POINT)EC_KEY_get0_public_key(ec_key);
EC_GROUP* group = (EC_GROUP*)EC_KEY_get0_group(ec_key);
int buflen = EC_POINT_point2oct(group, pub_key, EC_KEY_get_conv_form(ec_key), pubbuf, sizeof(pubbuf), NULL);

还有另外一种如下:
ASN1_BIT_STRING * pubkey;
pubkey = X509_get0_pubkey_bitstr(usrCert);
int nlen = pubkey->length;
pubkey->data

即为其公钥数据。

原文链接:https://blog.csdn.net/Elsa_Zhang/article/details/88190769

[转载]借助openssl解析ECC公钥的更多相关文章

  1. 学习ECC及Openssl下ECC生成密钥的部分源代码心得

    一.ECC的简介 椭圆曲线算法可以看作是定义在特殊集合下数的运算,满足一定的规则.椭圆曲线在如下两个域中定义:Fp域和F2m域. Fp域,素数域,p为素数: F2m域:特征为2的有限域,称之为二元域或 ...

  2. .NET导入openssl生成的公钥之BEGIN RSA PUBLIC KEY

    .NET导入openssl生成的公钥之BEGIN RSA PUBLIC KEY 我得到了一个公钥,形式如下 -----BEGIN RSA PUBLIC KEY----- MIGJAoGBAMroxz3 ...

  3. ECC公钥格式详解

    本文首先介绍公钥格式相关的若干概念/技术,随后以示例的方式剖析DER格式的ECC公钥,最后介绍如何使用Java生成.解析和使用ECC公钥. ASN.1 Abstract Syntax Notation ...

  4. openssl解析国密X509证书

    openssl解析国密X509证书,把公钥拿出来重写一下就行了        x = strToX509(pbCert, pulCertLen);dwRet = getCertPubKey(x, &a ...

  5. [转帖]ECC公钥格式详解

    ECC公钥格式详解 https://www.cnblogs.com/xinzhao/p/8963724.html 本文首先介绍公钥格式相关的若干概念/技术,随后以示例的方式剖析DER格式的ECC公钥, ...

  6. openssl pem 生成公钥和私钥及文件

    openssl pem.h 中提供了关于pem格式密钥对的操作接口 通常使用.pem的格式文件来保存openssl 生成的密钥对: 在终端下 cat xxx.pem 可以看到 p.p1 { margi ...

  7. Windows 下使用OpenSSL生成RSA公钥和私钥

    Windows 下使用OpenSSL生成RSA公钥和私钥 (1)下载OpenSSL 可到该地址下载OpenSSL: https://www.openssl.org/source/(https://ww ...

  8. 【转载】OpenSSL 提取 pfx 数字证书公钥与私钥

    转自https://www.cnblogs.com/Irving/p/9551110.html OpenSSL 提取 pfx 数字证书公钥与私钥   由于之前生产环境已经使用了 Identityser ...

  9. 通过OpenSSL解析X509证书基本项

    在之前的文章"通过OpenSSL解码X509证书文件"里.讲述了怎样使用OpenSSL将证书文件解码,得到证书上下文结构体X509的方法. 以下我们接着讲述怎样通过证书上下文结构体 ...

随机推荐

  1. Android--ViewPager点击按钮切换下一页

    不再重写一遍了,看csdn: https://blog.csdn.net/qq_42866164/article/details/101346058

  2. 继续死磕python

    一.数据运算 算术运算 比较运算 赋值运算 逻辑运算 成员运算 身份运算 位运算 其中左右移运算是逻辑左右移即缺失位补0,而算数右移缺失补符号位(注意逻辑运算都是补码运算即都取补码再运算,然后结果也是 ...

  3. 源讯科技(中国)有限公司(Atos Worldline)

    源讯公司是欧洲***的IT服务公司,去年营收达到88亿欧元,在全球52个国家拥有77100名员工.Worldline为Atos(源讯)全资子公司,专注于金融支付领域.Worldline在B2B及B2C ...

  4. Codeforces 950 010子序列拆分 数列跳棋

    A B a,b两个序列分成K段 每一段的值相等 #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset ...

  5. Python核心技术与实战——三|字符串

    一.字符串基础 Python的字符串支持单引号('').双引号("")和三引号之中('''....'''和"""...""&quo ...

  6. python 删除/app/*/logs/*/*.logs指定多少天的文件

    # encoding: utf-8 import sys import getopt import os import glob import time import datetime def rem ...

  7. vue-jwt 实战

    作用:把用户的信息储存到客户端 每次客户端带上token 校验是否登陆过 1.使用主要有两个api jwt.sign(payload, secretOrPrivateKey, [options, ca ...

  8. Azure IoT 技术研究系列2

    上篇博文中,我们主要介绍了Azure IoT Hub的基本概念.架构.特性: Azure IoT 技术研究系列1-入门篇 本文中,我们继续深入研究,做一个起步示例程序:模拟设备注册到Azure IoT ...

  9. 【NOIP2013模拟】导弹防御塔

    题目 Freda的城堡-- "Freda,城堡外发现了一些入侵者!" "喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~" "可是入侵者 ...

  10. HTML5基础内容(二)

    HTML(HyperText Markup Language)超文本标记语言 一.HTML注释 元素就是标签,标签就是元素. 注释中的内容不会在页面中显示,但是可以在源码中看到. 可以通过编写注释来对 ...