openssl 学习之从证书中提取RSA公钥N 和 E
原文链接: http://blog.csdn.net/kkxgx/article/details/19850509
通常数字证书包含很多信息,其中N和E值即我们称为的公钥。如何从PEM 或者DER格式的证书中提出证书呢?下面给出代码实现从PEM和DER编码的证书中提出N、E。
- #include <openssl/evp.h>
- #include <openssl/x509.h>
- #include <stdio.h>
- #include <stdlib.h>
- void PrintHex(unsigned char *str, unsigned int len)
- {
- int i = 0;
- for(i =0;i< len; i++)
- {
- if(i%4 == 0)
- {
- printf("0x");
- }
- printf("%02x",str[i]);
- if(i%4 == 3)
- {
- printf(" ");
- }
- if(i%16 == 15)
- {
- printf("\n");
- }
- }
- printf("\n");
- }
- void GetPukfromPEM()
- {
- X509 *x;
- BIO *b;
- EVP_PKEY *k;
- RSA *rsa;
- unsigned char n[300] ={0x0};
- unsigned char e[300] ={0x0};
- unsigned int len;
- /*www.google.com1为PEM格式的数字证书,从firefox中导出 */
- b=BIO_new_file("www.google.com1","r");
- x=PEM_read_bio_X509(b,NULL,NULL,NULL);
- k=X509_get_pubkey(x);
- rsa=EVP_PKEY_get1_RSA(k);
- if(rsa->n != NULL)
- {
- BN_bn2bin(rsa->n, n);
- len= BN_num_bytes(rsa->n);
- printf("N:\n");
- PrintHex(n,len);
- }
- else
- {
- printf("PEM error \n");
- }
- if(rsa->e != NULL)
- {
- BN_bn2bin(rsa->e, e);
- len= BN_num_bytes(rsa->e);
- printf("E:\n");
- PrintHex(e,len);
- }
- else
- {
- printf("PEM error \n");
- }
- BIO_free(b);
- X509_free(x);
- }
- void GetPukfromDER()
- {
- X509 *x;
- FILE *fp;
- unsigned char buf[5000],*p;
- int ret;
- EVP_PKEY *k;
- RSA *rsa;
- unsigned char n[300] ={0x0};
- unsigned char e[300] ={0x0};
- unsigned int len;
- /* www.google.com2为DER编码的数字证书 ,从firefox中导出
- */
- fp=fopen("www.google.com2","rb");
- if(!fp) return ;
- len=fread(buf,1,5000,fp);
- fclose(fp);
- p=buf;
- x=X509_new();
- d2i_X509(&x,(const unsigned char **)&p,len);
- k=X509_get_pubkey(x);
- rsa=EVP_PKEY_get1_RSA(k);
- if(rsa->n != NULL)
- {
- BN_bn2bin(rsa->n, n);
- len= BN_num_bytes(rsa->n);
- printf("N:\n");
- PrintHex(n,len);
- }
- else
- {
- printf("DER error \n");
- }
- if(rsa->e != NULL)
- {
- BN_bn2bin(rsa->e, e);
- len= BN_num_bytes(rsa->e);
- printf("E:\n");
- PrintHex(e,len);
- }
- else
- {
- printf("DER error \n");
- }
- X509_free(x);
- }
- int main()
- {
- GetPukfromPEM();
- GetPukfromDER();
- return 0;
- }
程序执行结果如下:
- N:
- 0xb073f0f2 0x04eec2a2 0x46ca342a 0xaabb6023
- 0xd111761f 0x1f3ad065 0x834e9a45 0xa8437085
- 0x76f01f87 0x00021f6e 0x3b1717c4 0xb5e91946
- 0xa292258d 0x622ab463 0x301fb985 0xf835e116
- 0x5a7649cc 0x50485339 0x5989d684 0x02fb9aec
- 0x1bc751d5 0x769590d4 0x3a2ab8a6 0xde024d06
- 0xfbcdeda5 0x46415f55 0x74e5ec7e 0x40dc509c
- 0xb5e4355d 0x1e6820f8 0xe9dea36a 0x28bf41d2
- 0xa1b3e225 0x8d0c1bca 0x3d930c18 0xaedfc5bc
- 0xfdbc82ba 0x6800d716 0x32719f65 0xb511da68
- 0x59d0a657 0x641bc9fe 0x98e5f5a5 0x65eae1db
- 0xeef4b39d 0xb38eea87 0xae16d21e 0xa07c7c69
- 0x3f291685 0x0153a76c 0xf160abdd 0xa2fc2547
- 0xd432d112 0xddf74812 0xe0fc9ca2 0x7798e989
- 0x99b8f838 0xf18c06c2 0x7a23366d 0x9b9dcd30
- 0xc8c73417 0x1ebb7d42 0xc8abe715 0x16f673b5
- E:
- 0x010001
- N:
- 0xb073f0f2 0x04eec2a2 0x46ca342a 0xaabb6023
- 0xd111761f 0x1f3ad065 0x834e9a45 0xa8437085
- 0x76f01f87 0x00021f6e 0x3b1717c4 0xb5e91946
- 0xa292258d 0x622ab463 0x301fb985 0xf835e116
- 0x5a7649cc 0x50485339 0x5989d684 0x02fb9aec
- 0x1bc751d5 0x769590d4 0x3a2ab8a6 0xde024d06
- 0xfbcdeda5 0x46415f55 0x74e5ec7e 0x40dc509c
- 0xb5e4355d 0x1e6820f8 0xe9dea36a 0x28bf41d2
- 0xa1b3e225 0x8d0c1bca 0x3d930c18 0xaedfc5bc
- 0xfdbc82ba 0x6800d716 0x32719f65 0xb511da68
- 0x59d0a657 0x641bc9fe 0x98e5f5a5 0x65eae1db
- 0xeef4b39d 0xb38eea87 0xae16d21e 0xa07c7c69
- 0x3f291685 0x0153a76c 0xf160abdd 0xa2fc2547
- 0xd432d112 0xddf74812 0xe0fc9ca2 0x7798e989
- 0x99b8f838 0xf18c06c2 0x7a23366d 0x9b9dcd30
- 0xc8c73417 0x1ebb7d42 0xc8abe715 0x16f673b5
- E:
- 0x010001
openssl 学习之从证书中提取RSA公钥N 和 E的更多相关文章
- java 从 PKCS12(比如pfx格式)证书中提取私钥证书(PrivateKey)和受信任的公钥证书(X509Certificate)的序列号(SerialNumber)
import lombok.Cleanup; import lombok.Getter; import lombok.Setter; import lombok.SneakyThrows; impor ...
- (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
openssl rsa 是RSA对称密钥的处理工具 openssl pkey 是通用非对称密钥处理工具,它们用法基本一致,所以只举例说明openssl rsa. 它们的用法很简单,基 ...
- (11) openssl req(生成请求证书、私钥和自建CA)
伪命令req大致有3个功能:生成证书请求文件.验证证书请求文件和创建根CA. 由于openssl req命令选项较多,所以先各举几个例子,再集中给出openssl req的选项说明.若已熟悉opens ...
- X509证书中RSA公钥的提取与载入
原文链接: http://blog.chinaunix.net/uid-16515626-id-2741894.html 由于项目需要,我计划利用openssl开发一个基本的CA,实现证书的发放等 ...
- [转载]X509证书中RSA公钥的提取与载入 pem key
原地址:https://blog.csdn.net/anddy926/article/details/8940377 由于项目需要,我计划利用openssl开发一个基本的CA,实现证书的发放等功能.在 ...
- java验证openssl生成的ssl证书和私钥是否匹配
最近有一个需求上传ssl证书和私钥,但是上传之前需要验证ssl证书和私钥是否正确,其中的业务逻辑涉及到以下几点: 一.读取ssl证书,读取ssl证书公钥 要实现该功能比较简单,java里面 ...
- OpenSSL学习笔记
SSL缺省只进行server端的认证,客户端的认证是可选的.以下是其流程图(摘自TLS协议). 加密算法介绍: 对称加密: DES:date encrption standard,56bit 3DES ...
- iOS中使用RSA对数据进行加密解密
RSA算法是一种非对称加密算法,常被用于加密数据传输.如果配合上数字摘要算法, 也可以用于文件签名. 本文将讨论如何在iOS中使用RSA传输加密数据. 本文环境 mac os openssl-1.0. ...
- OPENSSL 学习整理-介绍
Openssl目录名以及功能描述 目录名 功能描述 Crypto 存放OpenSSL 所有加密算法源码文件和相关标注如X.509 源码文件,是OpenSSL中最重要的目录,包含了OpenSSL 密码算 ...
随机推荐
- 【NetDIY智能主控】开发计划
经过一个轮回,硬件开发.硬件创业又被推到了历史的前台. 面向低端.初级的硬件爱好者,以Arduino和81单片开发板为核心的开源硬件越来越深入人心,参与的人群越来越多,相关硬件和周边模块也越来越便宜. ...
- 跟我一起学WCF(8)——WCF中Session、实例管理详解
一.引言 由前面几篇博文我们知道,WCF是微软基于SOA建立的一套在分布式环境中各个相对独立的应用进行交流(Communication)的框架,它实现了最新的基于WS-*规范.按照SOA的原则,相对独 ...
- AutoMapper指定列名进行映射
有了AutoMapper,就再也不用进行手工一对一的从IDataReader到实体字段的赋值.这篇博文是一个实际案例的记录. 实体类型定义如下: public class UploadImage { ...
- Jquery最全过滤器总结
不管什么时候,总是有这么些时候:当我们使用jQuery的各种过滤器时,总是有那么几个记不牢,还要搜索一下或者翻翻手册!多少次想总结一下,最终都没总结,现在网上找到一篇总结的不错的,但是排版有点乱,本人 ...
- 字符串匹配算法之KMP&Boyer-Moore
KMP&Boyer-Moore KMP算法是通过分析子串,预先计算每个位置发生不匹配的时候所需移动的下一个位置,直到达到字符串的末尾.KMP&Boyer-Moore算法是通过" ...
- [MFC] MFC 获取指定窗口截图(大小可调)
void screenShot(CRect rect,int left,int top,char *name){//截取窗口的大小,位置,名字(保存在默认路径下) CBitmap* m_pBitmap ...
- cookie and session
Session is used to save the message for the hole period of user dialogue in web service.Such as the ...
- linux学习笔记1
2016年09月25日 unix与linux发展史 unix是linux之父,学习linux后能容易上手unix. linux是源码开放的unix,由一位芬兰大学生李纳斯在网络上发起,和后来众多爱好者 ...
- BOM (Browser Object Model) 浏览器对象模型
l对象的角色,因此所有在全局作用域中声明的变量/函数都会变成window对象的属性和方法; // PS:尝试访问未声明的变量会抛出错误,但是通过查询window对象,可以知道某个可能未声明的对象是否存 ...
- Django基础——Form&Ajax篇
一 Form 在实际的生产环境中,登录和注册时用户提交的数据浏览器端都会使用JavaScript来进行验证(比如验证输入是否为空以及输入是否合法),但是浏览器可能会禁用JavaScirpt,同时也有人 ...