openssl pem 生成公钥和私钥及文件
openssl pem.h 中提供了关于pem格式密钥对的操作接口
通常使用.pem的格式文件来保存openssl 生成的密钥对;
在终端下 cat xxx.pem 可以看到
-----BEGIN RSA PRIVATE KEY-----
XXXX
-----END RSA PRIVATE KEY-----
密钥数据进行了BASE64编码
1. 示例:将生成的密钥对保存成pem文件
void testWriteRSA2PEM()
{
//生成密钥对
RSA *r = RSA_new();
int bits = ;
BIGNUM *e = BN_new();
BN_set_word(e, );
RSA_generate_key_ex(r, bits, e, NULL); RSA_print_fp(stdout, r, ); BIO *out;
out = BIO_new_file("/Users/cocoajin/Desktop/opriv.pem","w");
//这里生成的私钥没有加密,可选加密
int ret = PEM_write_bio_RSAPrivateKey(out, r, NULL, NULL, , NULL, NULL);
printf("writepri:%d\n",ret);
BIO_flush(out);
BIO_free(out); out = BIO_new_file("/Users/cocoajin/Desktop/opub.pem","w");
ret = PEM_write_bio_RSAPublicKey(out, r);
printf("writepub:%d\n",ret);
BIO_flush(out);
BIO_free(out); BN_free(e);
RSA_free(r); }
在目标路径保存了生成的公钥opub.pem和私钥oprov.pem
输出日志
Private-Key: ( bit)
modulus:
:e6::f5:6f:4d:5e:c2:ad:0d:f5:::::
ca:6f::4f:3a:::e2:ee:a2:cc::::e2:
3d:0d:e3:0d:c0:6a:::b6:c7:de:e2:d6:::
9e::::dd:2d::c5:a8:f2:c1::8b::f9:
:0a:7a::
publicExponent: (0x10001)
privateExponent:
:ca:1b::6f:c5:de:c2:bf:2f:b6::f7:ad:d8:
::fc::fd:0a:e0::6b::::ea::8c:
b0:7a:d3:d8::b7:fb::f1:4e::9d:bf::3a:
e0:f3:fa::d3::fd:b0:f5:cd:5c::d1::8c:
:e3:fb:c7:
prime1:
:f6:d7::c4:1a:2f:eb:0b:c4:::3b:fe:f6:
0d:c1:::ca:6c::fc:de:d7::ac::9d::
:fe:9b
prime2:
:ef:::::4d:ac::aa:ed:e9:a7:1d:5d:
b1:7d:1c:1a:ef::8f:2d:bc:8a:e7::f5:f8::
::
exponent1:
:f4:d2:c0:6f:b8:ed::fa:::2f::::
b3::9f:c0:6c:b8:::b1:df:b4::fd:2a::
:ec:2b
exponent2:
:b5::c1::bc:3d::f8:::db:f9:5c:c4:
:d8::fe:::7e:a6:b4:6a:::db::d0:
::
coefficient:
0a:::2f:e9:ca:b6::::3b:5a::ea:5e:
8d:::b9:7a:::c4::cb::0e::6b:1b:
e5:c4
writepri:
writepub:
Program ended with exit code:
2. 示例:从pem文件中获取公钥私钥方式一(利用了BIO)
void testReadRSAFromPEM()
{
RSA *pubkey = RSA_new();
RSA *prikey = RSA_new(); BIO *pubio;
BIO *priio; priio = BIO_new_file("/Users/cocoajin/Desktop/opriv.pem", "rb");
prikey = PEM_read_bio_RSAPrivateKey(priio, &prikey, NULL, NULL); pubio = BIO_new_file("/Users/cocoajin/Desktop/opub.pem", "rb");
pubkey = PEM_read_bio_RSAPublicKey(pubio, &pubkey, NULL, NULL); RSA_print_fp(stdout, pubkey, );
RSA_print_fp(stdout, prikey, ); RSA_free(pubkey);
BIO_free(pubio);
RSA_free(prikey);
BIO_free(priio); }
从目标路径读取公钥opub.pem和私钥opriv.pem
输出日志
Public-Key: ( bit)
Modulus:
:e6::f5:6f:4d:5e:c2:ad:0d:f5:::::
ca:6f::4f:3a:::e2:ee:a2:cc::::e2:
3d:0d:e3:0d:c0:6a:::b6:c7:de:e2:d6:::
9e::::dd:2d::c5:a8:f2:c1::8b::f9:
:0a:7a::
Exponent: (0x10001)
Private-Key: ( bit)
modulus:
:e6::f5:6f:4d:5e:c2:ad:0d:f5:::::
ca:6f::4f:3a:::e2:ee:a2:cc::::e2:
3d:0d:e3:0d:c0:6a:::b6:c7:de:e2:d6:::
9e::::dd:2d::c5:a8:f2:c1::8b::f9:
:0a:7a::
publicExponent: (0x10001)
privateExponent:
:ca:1b::6f:c5:de:c2:bf:2f:b6::f7:ad:d8:
::fc::fd:0a:e0::6b::::ea::8c:
b0:7a:d3:d8::b7:fb::f1:4e::9d:bf::3a:
e0:f3:fa::d3::fd:b0:f5:cd:5c::d1::8c:
:e3:fb:c7:
prime1:
:f6:d7::c4:1a:2f:eb:0b:c4:::3b:fe:f6:
0d:c1:::ca:6c::fc:de:d7::ac::9d::
:fe:9b
prime2:
:ef:::::4d:ac::aa:ed:e9:a7:1d:5d:
b1:7d:1c:1a:ef::8f:2d:bc:8a:e7::f5:f8::
::
exponent1:
:f4:d2:c0:6f:b8:ed::fa:::2f::::
b3::9f:c0:6c:b8:::b1:df:b4::fd:2a::
:ec:2b
exponent2:
:b5::c1::bc:3d::f8:::db:f9:5c:c4:
:d8::fe:::7e:a6:b4:6a:::db::d0:
::
coefficient:
0a:::2f:e9:ca:b6::::3b:5a::ea:5e:
8d:::b9:7a:::c4::cb::0e::6b:1b:
e5:c4
Program ended with exit code:
3. 示例:从pem文件中读取公钥私钥方式二(利用FILE)
void testPEMReadRSA()
{
RSA *pubkey = RSA_new();
RSA *prikey = RSA_new(); FILE *pubf = fopen("/Users/cocoajin/Desktop/opub.pem", "rb");
pubkey = PEM_read_RSAPublicKey(pubf, &pubkey, NULL, NULL); FILE *prif = fopen("/Users/cocoajin/Desktop/opriv.pem", "rb");
prikey = PEM_read_RSAPrivateKey(prif, &prikey, NULL, NULL); RSA_print_fp(stdout, pubkey, );
RSA_print_fp(stdout, prikey, ); fclose(pubf);
fclose(prif);
RSA_free(pubkey);
RSA_free(prikey); }
输出日志
Public-Key: ( bit)
Modulus:
:e6::f5:6f:4d:5e:c2:ad:0d:f5:::::
ca:6f::4f:3a:::e2:ee:a2:cc::::e2:
3d:0d:e3:0d:c0:6a:::b6:c7:de:e2:d6:::
9e::::dd:2d::c5:a8:f2:c1::8b::f9:
:0a:7a::
Exponent: (0x10001)
Private-Key: ( bit)
modulus:
:e6::f5:6f:4d:5e:c2:ad:0d:f5:::::
ca:6f::4f:3a:::e2:ee:a2:cc::::e2:
3d:0d:e3:0d:c0:6a:::b6:c7:de:e2:d6:::
9e::::dd:2d::c5:a8:f2:c1::8b::f9:
:0a:7a::
publicExponent: (0x10001)
privateExponent:
:ca:1b::6f:c5:de:c2:bf:2f:b6::f7:ad:d8:
::fc::fd:0a:e0::6b::::ea::8c:
b0:7a:d3:d8::b7:fb::f1:4e::9d:bf::3a:
e0:f3:fa::d3::fd:b0:f5:cd:5c::d1::8c:
:e3:fb:c7:
prime1:
:f6:d7::c4:1a:2f:eb:0b:c4:::3b:fe:f6:
0d:c1:::ca:6c::fc:de:d7::ac::9d::
:fe:9b
prime2:
:ef:::::4d:ac::aa:ed:e9:a7:1d:5d:
b1:7d:1c:1a:ef::8f:2d:bc:8a:e7::f5:f8::
::
exponent1:
:f4:d2:c0:6f:b8:ed::fa:::2f::::
b3::9f:c0:6c:b8:::b1:df:b4::fd:2a::
:ec:2b
exponent2:
:b5::c1::bc:3d::f8:::db:f9:5c:c4:
:d8::fe:::7e:a6:b4:6a:::db::d0:
::
coefficient:
0a:::2f:e9:ca:b6::::3b:5a::ea:5e:
8d:::b9:7a:::c4::cb::0e::6b:1b:
e5:c4
Program ended with exit code:
4. 在终端下使用openssl命令生成公钥私钥
//生成1024位的RSA私钥
openssl genrsa -out private.pem //再由私钥生成公钥
openssl rsa -in private.pem -pubout -out public.pem //私钥文件private.pem
//公钥文件public.pem
//上面私钥是没加密的,可选加密,指定一个加密算法生成时输入密码
以上测试使用openssl 1.1.0c
参考:https://www.openssl.org/docs/man1.1.0/crypto/PEM_read_bio_RSAPublicKey.html
openssl pem 生成公钥和私钥及文件的更多相关文章
- openssl windows 生成公钥与私钥
链接: https://pan.baidu.com/s/1qn-qeFxovor-vcAWFl8jIw 提取码: zy5v 一,下载安装windows平台openssl密钥生成工具,执行安装目录bin ...
- git 生成公钥、私钥方法与clone使用方法
我的配置流程 Git配置 Git安装完之后,需做git配置.打开git bash,分别执行以下两句命令 git config --global user.name "用户名" gi ...
- Git简单生成生成公钥和私钥方法
Git简单生成生成公钥和私钥方法 Git配置 Git安装完之后,需做最后一步配置.打开git bash,分别执行以下两句命令 git config --global user.name “用户名” g ...
- Git安装与使用(windows环境)(一)----Git安装、生成公钥和私钥、添加SSH
安装 1.从官网下载git:http://git-scm.com/downloads 2.安装git,选择git组件安装,如下图 3.一直next,直到出现下面的窗口.这里是选择命令行形式.(可以理解 ...
- GIT生成公钥和私钥
转载至:https://blog.csdn.net/gwz1196281550/article/details/80268200 打开 git bash! git config --global us ...
- MAC下用OPENSSL生成公钥和私钥
MAC OS自带了OpenSSL,所以不用去编译那一坨跟SHIT一样的源码.直接在命令行里使用OPENSSL就可以. 打开命令行工具,然后输入 openssl打开openssl,接着只要三句命令就可以 ...
- 使用keytool生成公钥、私钥、证书并且读取出来,使用私钥签名jar并验证(转)
参考链接:http://happyqing.iteye.com/blog/2139504 :https://blog.csdn.net/arjelarxfc/article/details/52461 ...
- xshell生成公钥和私钥
一.打开你的xshell工具,工具栏有一个工具选项,点开选择新建用户密钥生成向导(如下图所示) 二. 点开之后就会如上图所示一样,点击选择下一步,出现如下,再点击下一步 点击完下一步会出现如下图所示 ...
- sourceTree 生成公钥和私钥 然后拉项目代码
第一步 用sourceTree生成公钥pub和私钥文件ppk 打开sourceTree -> 工具 -> 创建或导入ssh密钥 -> 点击generate -> 上面会显 ...
随机推荐
- 【实践】js实现简易的四则运算计算器
最近看了一个大神推荐的某公司面试程序员的js 面试题,题目是用js 做一个计算器于是跟着大神的思想自己做了一下 ps:功能还没有完善好毕竟自己还是一只菜鸟还在不断学习中. 闲话不多说先上css代码 & ...
- Motor XT615 开机无限卡屏重启的取证与分析
hello,大家好! 今天我给大家你们带来摩托罗拉 XT615 开机无限卡屏重启的取证与分析, 手机开机后卡屏,一直停留下面这画面,无限重启! 接下来,经过我们工程师的分析,图上报错必定由于机身程序太 ...
- linux内核的makefile.txt讲解
linux内核的linux-3.6.5\Documentation\kbuild\makefiles.txt Linux Kernel Makefiles This document describe ...
- 003_关于IntellJ IDE 2016 1. 4的使用
IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.各类版本工具( ...
- Java中ProcessBuilder应用实例
系列说明 浅析Java.lang.Runtime类 浅析Java.lang.Process类 浅析Java.lang.ProcessBuilder类 可以使用java中的ProcessBuilder执 ...
- three.js初涉略(一)
<!-- 最近要研究一下webgl,发现了webgl中文网(http://www.hewebgl.com/article/articledir/1).边研究教程边做下记录 --> thre ...
- C++内存泄露之野指针
写出本文仅仅是处于备忘的目的. 最近为现在做的软件添加了一个内存回收机制(以前处于某种内存只申请不释放,这并不等于内存泄露,因为我们知道这些内存块在内存中的位置)-- 在某一块内存不使用的时候将其释放 ...
- 非本地跳转之setjmp与longjmp
非本地跳转(unlocal jump)是与本地跳转相对应的一个概念. 本地跳转主要指的是类似于goto语句的一系列应用,当设置了标志之后,可以跳到所在函数内部的标号上.然而,本地跳转不能将控制权转移到 ...
- 20161014006 DataGridView Combobox 数据绑定与传值
//Combobox private void T_Form_CY_CBD_D_CurrentCellChanged(object sender, EventArgs e) ...
- stm32 cubemx hal 工程中 微秒延迟 delay_us
参考的正点原子的代码 测试平台 stm32f429i-disco 配了一个gpio 时钟 gpio /* USER CODE BEGIN 0 */ typedef uint8_t u8; typede ...