[转载]借助openssl解析ECC公钥
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公钥的更多相关文章
- 学习ECC及Openssl下ECC生成密钥的部分源代码心得
一.ECC的简介 椭圆曲线算法可以看作是定义在特殊集合下数的运算,满足一定的规则.椭圆曲线在如下两个域中定义:Fp域和F2m域. Fp域,素数域,p为素数: F2m域:特征为2的有限域,称之为二元域或 ...
- .NET导入openssl生成的公钥之BEGIN RSA PUBLIC KEY
.NET导入openssl生成的公钥之BEGIN RSA PUBLIC KEY 我得到了一个公钥,形式如下 -----BEGIN RSA PUBLIC KEY----- MIGJAoGBAMroxz3 ...
- ECC公钥格式详解
本文首先介绍公钥格式相关的若干概念/技术,随后以示例的方式剖析DER格式的ECC公钥,最后介绍如何使用Java生成.解析和使用ECC公钥. ASN.1 Abstract Syntax Notation ...
- openssl解析国密X509证书
openssl解析国密X509证书,把公钥拿出来重写一下就行了 x = strToX509(pbCert, pulCertLen);dwRet = getCertPubKey(x, &a ...
- [转帖]ECC公钥格式详解
ECC公钥格式详解 https://www.cnblogs.com/xinzhao/p/8963724.html 本文首先介绍公钥格式相关的若干概念/技术,随后以示例的方式剖析DER格式的ECC公钥, ...
- openssl pem 生成公钥和私钥及文件
openssl pem.h 中提供了关于pem格式密钥对的操作接口 通常使用.pem的格式文件来保存openssl 生成的密钥对: 在终端下 cat xxx.pem 可以看到 p.p1 { margi ...
- Windows 下使用OpenSSL生成RSA公钥和私钥
Windows 下使用OpenSSL生成RSA公钥和私钥 (1)下载OpenSSL 可到该地址下载OpenSSL: https://www.openssl.org/source/(https://ww ...
- 【转载】OpenSSL 提取 pfx 数字证书公钥与私钥
转自https://www.cnblogs.com/Irving/p/9551110.html OpenSSL 提取 pfx 数字证书公钥与私钥 由于之前生产环境已经使用了 Identityser ...
- 通过OpenSSL解析X509证书基本项
在之前的文章"通过OpenSSL解码X509证书文件"里.讲述了怎样使用OpenSSL将证书文件解码,得到证书上下文结构体X509的方法. 以下我们接着讲述怎样通过证书上下文结构体 ...
随机推荐
- Eclipse Git分支实战
切换分支 右键工程,创建新分支 命名新分支 点击finish,可以看到项目已经切换到hot_fix 修改代码: Ctrl+#提交到本地仓库,之后提交到远程仓库 Next,Finish 等待一下, 点击 ...
- tortoise svn回滚常用命令
一.revert to this version 和 revert changes from this version的区别 假设SVN已有版本4814-4854:1.基于4837版本执行[rever ...
- rest_framework框架的版本
REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES':['rest_framework.renderers.JSONRenderer','rest_framewo ...
- 管线命令(Pipe)
管线命令接受|前面传来的stdout,管线示意图如下所示: 管线两个需要注意的地方: 1.管线仅会处理stdout,忽略对stderr的处理 2.管线必须接受前个指令的stdin才是 那么,如果我想接 ...
- nodejs 操作 mongodb 数据库
操作手册: npmjs.com 搜索: mongodb 使用官方的 mongodb 包来操作 https://github.com/mongodb/node-mongodb-native ...
- Codeforces1234F. Yet Another Substring Reverse(状压dp)
题目链接:传送门 思路: 由于只能翻转一次子串,就相当于找出两个不连续的子串,把在后面的一个子串翻转过来,和第一个子串拼接. 因为题目仅要求子串中的字符不重复,所以字符的先后顺序无关,翻转的操作就相当 ...
- [NOI2018]归程(kruscal重构树)
[NOI2018]归程 题面太长辣,戳这里 模拟赛上写了一个spfa (关于spfa,它已经死了),然后一个st表水完暴力跑路.考后说是Kruscal重构树或者可持久化并查集???这都是些什么东西.不 ...
- string遍历
#include <iostream>#include <string> using namespace std;int main(int argc, const char * ...
- IntelliTrace调试
当您进行调试时,IntelliTrace 将在后台收集有关托管应用程序的数据,其中包括来自许多框架组件(例如 ADO.NET.ASP.NET 和 System.XML)的信息.这些 IntelliTr ...
- bzoj5089 最大连续子段和 分块+复杂度分析+凸包
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5089 题解 本来打算迟一点再写这个题解的,还有一个小问题没有弄清楚. 不过先写一下存个档吧. ...