软件版本

openssl:版本1.1.1k,编译后的静态库
visual studio:版本2010

全部代码

#pragma comment(lib, "Crypt32.lib")
#pragma comment(lib, "compile_win_x86_lib\\lib\\libcrypto.lib")
#pragma comment(lib, "compile_win_x86_lib\\lib\\libssl.lib")
#include "openssl/rsa.h"
#include "openssl/pem.h"
#include "openssl/x509v3.h"
#include "openssl/pkcs12.h"void testSavePem()
{BIO* outBio = NULL;char buf[4096];RSA* rsaCtx = NULL;PKCS8_PRIV_KEY_INFO* pkcs8Info = NULL;EVP_PKEY* pEvKey = NULL;X509_SIG* x509Sig = NULL;memset(buf, 0x00, sizeof(buf));rsaCtx = RSA_generate_key(2048, 65537, NULL, NULL);/* public key PKCS#8  */outBio = BIO_new(BIO_s_mem());PEM_write_bio_RSA_PUBKEY(outBio, rsaCtx); BIO_read(outBio, buf, sizeof(buf));printf("public key PKCS#8 pem file data=\n%s\n", buf);BIO_free(outBio);outBio = NULL;/* public key PKCS#1  */memset(buf, 0x00, sizeof(buf));outBio = BIO_new(BIO_s_mem());PEM_write_bio_RSAPublicKey(outBio, rsaCtx);BIO_read(outBio, buf, sizeof(buf));printf("public key PKCS#1 pem file data=\n%s\n", buf);BIO_free(outBio);outBio = NULL;/* private key PKCS#1  */memset(buf, 0x00, sizeof(buf));outBio = BIO_new(BIO_s_mem());PEM_write_bio_RSAPrivateKey(outBio, rsaCtx, NULL, NULL, 0, NULL, NULL);BIO_read(outBio, buf, sizeof(buf));printf("private key PKCS#1 pem file data=\n%s\n", buf);BIO_free(outBio);outBio = NULL;/* private key PKCS#8 */memset(buf, 0x00, sizeof(buf));outBio = BIO_new(BIO_s_mem());pEvKey = EVP_PKEY_new();EVP_PKEY_set1_RSA(pEvKey, rsaCtx);pkcs8Info = EVP_PKEY2PKCS8(pEvKey);PEM_write_bio_PKCS8_PRIV_KEY_INFO(outBio, pkcs8Info);BIO_read(outBio, buf, sizeof(buf));printf("private key PKCS#8 pem file data=\n%s\n", buf);BIO_free(outBio);outBio = NULL;EVP_PKEY_free(pEvKey);pEvKey = NULL;PKCS8_PRIV_KEY_INFO_free(pkcs8Info);/* private key with password encrypt PKCS#1 */memset(buf, 0x00, sizeof(buf));outBio = BIO_new(BIO_s_mem());PEM_write_bio_RSAPrivateKey(outBio, rsaCtx, EVP_aes_256_cbc(), (unsigned char*)"123456", 6, NULL, NULL);//PKCS#1BIO_read(outBio, buf, sizeof(buf));printf("private key PKCS#1 pem file data with password=\n%s\n", buf);BIO_free(outBio);outBio = NULL;/* private key with password encrypt PKCS#8 */memset(buf, 0x00, sizeof(buf));outBio = BIO_new(BIO_s_mem());pEvKey = EVP_PKEY_new();EVP_PKEY_set1_RSA(pEvKey, rsaCtx);pkcs8Info = EVP_PKEY2PKCS8(pEvKey);x509Sig = PKCS8_encrypt(-1, EVP_aes_256_cbc(), (char*)"123456", 6, NULL, 0, 0, pkcs8Info);PEM_write_bio_PKCS8(outBio, x509Sig);BIO_read(outBio, buf, sizeof(buf));printf("private key PKCS#8 pem file data with password=\n%s\n", buf);BIO_free(outBio);outBio = NULL;EVP_PKEY_free(pEvKey);pEvKey = NULL;X509_SIG_free(x509Sig);PKCS8_PRIV_KEY_INFO_free(pkcs8Info);
}

代码说明

1、首先产生了RSA公私钥对;
2、然后对公钥私钥分别输出PEM格式数据;
3、格式有PKCS#1和PKCS#8,私钥分别有不带密码和带密码;
4、本测试直接printf输出PEM数据,没有保存文件,可根据各自需要新建文件保存。

公私钥保存成PEM文件相关推荐

  1. python pandas 把数据保存成csv文件,以及读取csv文件获取指定行、指定列数据

    文章目录: 1 数据说明 2 把数据集文件信息使用python pandas保存成csv文件 3 使用python pandas 读取csv的每行.每列数据 1 数据说明 1.在test_data目录 ...

  2. tcpdump抓包ftp协议_tcpdump抓包并保存成cap文件

    首选介绍一下tcpdump的常用参数 tcpdump采用命令行方式,它的命令格式为: tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接 ...

  3. 【转】DCMTK开源库的学习笔记1:将DCM文件保存成BMP文件或数据流(即数组)

    转自:https://blog.csdn.net/zssureqh/article/details/8784980 DCMTK开源库介绍: DCMTK是目前最全面实现DICOM3.0标准的开源库,通过 ...

  4. 和讯网债券数据Python爬取保存成CSV文件之一

    本文讲述国债数据使用python爬取的方式,并将得到的数据保存成CSV文件以日期命名,方便后期处理. 具体代码如下所示: import requests from bs4 import Beautif ...

  5. 使用SaveFileDialog将DataTable文件保存成csv文件

    使用SaveFileDialog将DataTable文件保存成csv文件 public static bool SaveDatatableToCSV(DataTable dt){bool create ...

  6. 从Matlab的Fig图片中提取数据,并保存成csv文件

    从Matlab的Fig图片中提取数据,并保存成csv文件 1.Fig图像是由单条曲线绘制 2.Fig图像是由双条曲线绘制 3.小结 本人亲自实测有效,但能力有限,目前仅用代码测试了 Figure图片单 ...

  7. Unity3d 提取mesh并保存成asset文件

    Unity3d 提取mesh并保存成asset文件 应用背景 下载链接 使用步骤 贴出脚本 应用背景 有些FBX文件过大,但是只用其中的一个mesh时,我们可以考虑把这个mesh单独提取出来保存问as ...

  8. 打开远程桌面保存成rdp文件

    需求: WSDEV-201026-01:运维服务账户  右键菜单 增加  打开远程桌面 步骤: 先保存成rdp文件,再调用rdp文件打开远程. 先看看系统给提供的是啥样的 我们要关心得是 用户名和密码 ...

  9. Python保存成pickle文件与读取

    保存和读取PKL文件 1.数据保存 我们可以将任何格式的数据保存成PKL文件储存起来,比如数组格式array.字典格式dict.数据框格式DataFrame import pickle5 as pic ...

  10. catia保存成stp文件时部件丢失_在线教学文件同步神器——坚果云

    教师在线办公期间,有教研组.备课组资源共享与协同办公的需求.在此推荐一款应用--坚果云[1],可以实现市面上绝大部分设备间的文件共享和同步,极高地提高在文件管理方面的效率. 推荐指数:★★★★★ ↓教 ...

最新文章

  1. 算法提高课-图论-单源最短路的建图方式-AcWing 1129. 热浪:dijkstra裸题
  2. bga焊盘怎么做_BGA封装的类型及焊盘设计的基本要求有哪些
  3. 射线检测(Summary)
  4. Linux内存管理:内存分配:slab分配器
  5. java 异步处理数据格式_spring mvc对异步请求的处理
  6. Effective C++ -----条款18:让接口容易被正确使用,不易被误用
  7. rk从u盘更新屏参文件_[更新]解决八代I3在华擎B150上核显不亮机问题
  8. AARRR用户运营模型简介
  9. ps滤镜之——马赛克
  10. xmos-XU208-128-QF48芯片简介
  11. 判断输入的日期是一年的第几天或者星期几
  12. Born to Win: Find Your Success Code by Zig Ziglar and Tom Ziglar
  13. 《Visual Prompting: Modifying Pixel Space to Adapt Pre-trained Models》论文阅读笔记
  14. 为什么PDF文件无法编辑?
  15. 前后端交互的两种方式
  16. 第八章 云计算原理与技术
  17. html5 智能家居 页面,内容二 - html5智能家居网站模板
  18. 【CarSim】指定CarSim联合的Matlab版本
  19. java中定义类的关键字是_java中定义类的关键字是什么?
  20. 金蝶K3--采购单价---导入

热门文章

  1. 用HTML绘制三线表,CSS制作三线表 | 学步园
  2. 【第一期】电商分布式前沿springboot接口服务之配置-Array-专题视频课程
  3. [置顶] 【原创】无线LED条屏信息报警项目---2012.05
  4. 风力摆?这是不是太简单了点
  5. Java——javac.exe、java.exe、javaw.exe的区别及Java运行机制
  6. PWM驱动MOS管H桥电路
  7. 2022年最新iOS面试题(附答案)
  8. CAN总线与CANOPEN协议
  9. java毕业生设计医疗机构药房管理系统软件开发计算机源码+系统+mysql+调试部署+lw
  10. android re浏览器下载,re浏览器官方版下载_re浏览器app下载4.9.6 - 系统城