openssl C++研发之pem格式处理详解

一、PEM_writeXXX和EM_write_bio_XXX

在OpenSSL的crypto/pem.h头文件中,PEM_write_XXXXPEM_write_bio_XXXX系列函数用于将特定类型的数据写入文件或BIO(内存缓冲区)中,其中XXXX代表不同的数据类型。

这些函数的使用方式相似,通常接受一个文件指针(FILE*)或BIO指针(BIO*)作为参数,并将相应类型的数据写入到文件或BIO中。请根据需要选择合适的函数,并在使用时确保正确处理错误情况。

1.1 PEM_write_X509 / PEM_write_bio_X509

  • 用于将X.509证书(X509结构体)写入文件或BIO中。

1.2 PEM_write_PrivateKey / PEM_write_bio_PrivateKey

  • 用于将私钥(EVP_PKEY结构体)写入文件或BIO中。

1.3 PEM_write_PUBKEY / PEM_write_bio_PUBKEY

  • 用于将公钥(EVP_PKEY结构体,通常是RSA、DSA、EC等密钥的公钥部分)写入文件或BIO中。

1.4. PEM_write_PKCS8PrivateKey / PEM_write_bio_PKCS8PrivateKey

  • 用于将PKCS#8格式的私钥(EVP_PKEY结构体)写入文件或BIO中。

1.5. PEM_write_RSAPrivateKey / PEM_write_bio_RSAPrivateKey

  • 用于将RSA私钥写入文件或BIO中。

1.6. PEM_write_RSAPublicKey / PEM_write_bio_RSAPublicKey

  • 用于将RSA公钥写入文件或BIO中。

1.7. PEM_write_DSA / PEM_write_bio_DSA

  • 用于将DSA密钥对(DSA结构体)写入文件或BIO中。

1.8. PEM_write_ECPrivateKey / PEM_write_bio_ECPrivateKey

  • 用于将EC(椭圆曲线)私钥写入文件或BIO中。

1.9. PEM_write_EC_PUBKEY / PEM_write_bio_EC_PUBKEY

  • 用于将EC公钥写入文件或BIO中。

二、PEM_writeXXX和EM_write_bio_XXX

PEM_readXXXPEM_read_bio_XXX 是 OpenSSL 库中用于读取 PEM 格式数据的一组接口。这些接口被用于读取不同类型的 PEM 数据,例如证书、私钥等。下面简要说明这两组接口的作用:

2.1. PEM_readXXX

这组接口用于从文件或内存中读取 PEM 格式数据,其中 XXX 表示不同的数据类型,例如:

  • PEM_read_RSAPrivateKey:用于读取 RSA 私钥。
  • PEM_read_RSAPublicKey:用于读取 RSA 公钥。
  • PEM_read_X509:用于读取 X.509 证书。
  • 等等…

这些接口通常接受一个文件指针作为参数,用于从文件中读取 PEM 数据。

2.2. PEM_read_bio_XXX

这组接口也用于从文件或内存中读取 PEM 格式数据,但与 PEM_readXXX 不同的是,PEM_read_bio_XXX 接受一个 BIO 结构体作为参数,用于提供更灵活的输入源支持。BIO 是 OpenSSL 中用于提供 I/O 抽象的结构体,它可以表示文件、内存等不同的数据源。

例如:

  • PEM_read_bio_RSAPrivateKey:用于从 BIO 中读取 RSA 私钥。
  • PEM_read_bio_RSAPublicKey:用于从 BIO 中读取 RSA 公钥。
  • PEM_read_bio_X509:用于从 BIO 中读取 X.509 证书。
  • 等等…

2.3. 使用示例

// 使用 PEM_read_RSAPrivateKey 从文件中读取 RSA 私钥
FILE *privateKeyFile = fopen("private_key.pem", "r");
RSA *rsaPrivateKey = PEM_read_RSAPrivateKey(privateKeyFile, NULL, NULL, NULL);
fclose(privateKeyFile);// 使用 PEM_read_bio_RSAPublicKey 从内存中读取 RSA 公钥
BIO *bio = BIO_new_mem_buf(publicKeyData, publicKeyDataLength);
RSA *rsaPublicKey = PEM_read_bio_RSAPublicKey(bio, NULL, NULL, NULL);
BIO_free(bio);

这里的例子演示了如何使用 PEM_read_RSAPrivateKeyPEM_read_bio_RSAPublicKey 从文件和内存中读取 RSA 密钥对。其他接口的使用方式类似,只需选择适当的接口和数据源类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/152954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++二分查找算法:132模式枚举3简洁版

本文涉及的基础知识点 二分查找算法合集 本题不同解法 包括题目及代码C二分查找算法:132 模式解法一枚举3C二分查找算法:132 模式解法二枚举2代码简洁C二分查找算法:132 模式解法三枚举1性能最佳C单调向量算法:132 模式解法三枚…

BetterDisplay Pro v2.0.11(显示器颜色校准软件)

BetterDisplay Pro是一款为Mac电脑设计的屏幕亮度调节软件,旨在提高显示器的色彩和亮度表现。它可以根据用户的需求和显示器的特性,自动调整显示器的亮度、色温、对比度等参数,以获得更加真实、舒适的视觉效果。 这款软件拥有智能调节功能&a…

数据结构:枚举

概念 枚举主要用途是:将一组常量组织起来,在这之前表示一组常量通常使用定义常量的方式: 比如下面的例子: public static final int RED 1; public static final int GREEN 2; public static final int BLACK 3; 利用常量…

【深入Scrapy实战】从登录到数据解析构建完整爬虫流程

文章目录 1. 写在前面2. 抓包分析3. Scrapy提交登陆请求4. 列表与详情页面数据解析5. 中间件Middleware配置 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xf…

python django 小程序图书借阅源码

开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图&#xff0…

设计模式(二)-创建者模式(1)-单例模式

概述 为何需要单例模式(Singleton Pattern)? 在程序运行当中,我们只希望一个类只能创建一个对象,在多个地方可以公用这个唯一的对象。 特点: 必须保证类只能创建一个对象。 单例模式可分为:饿汉式和懒…

使用ssh在本地环境(Windows)连接虚拟机以及其中的docker容器

配置虚拟机防火墙 防火墙的一系列操作需要root权限,默认是没有root密码的,所以首先需要设置root密码: sudo passwd root按提示完成root密码设置 切换到root账户 su root启用22端口并重启防火墙 firewall-cmd --permanent --add-port22/tc…

【NI-RIO入门】CompactRIO介绍及环境安装

CompactRIO是什么? CompactRIO系统提供了高处理性能、传感器专用I/O和紧密集成的软件工具,使其成为工业物联网、监测和控制应用的理想之选。实时处理器提供可靠,可预测的行为,而FPGA在需要高速逻辑和精确定时的较小任务上表现出色…

Microsoft Visual Studio 2019下载及安装流程记录

第一周任务: 1.笔记本上安装vc2019的环境 2.再把OpenCV安装上 3.根据网上的教程,试着写几个opencv的程序 一、安装Visual Studio 2019社区版 首先先完成安装vc2019的环境, 因为: Microsoft Visual C是用于C编程的工具集合&am…

机器学习笔记 - Ocr识别中的CTC算法原理概述

一、文字识别 在文本检测步骤中,分割出了文本区域。现在需要识别这些片段中存在哪些文本。 机器学习笔记 - Ocr识别中的文本检测EAST网络概述-CSDN博客文章浏览阅读300次。在 EAST 网络的这个分支中,它合并了 VGG16 网络不同层的特征输出。现在,该层之后的特征大小将等于 p…

什么是一阶逻辑?

一阶逻辑(FOL)是指句子或陈述的谓词只能指单个主语Subject的逻辑。 一阶逻辑也称为谓词逻辑或一阶谓词逻辑,它不但能以更简便的方式表达对象信息,还能表达这些对象之间的关系。 一阶逻辑(像自然语言一样)…

matlab 坡度滤波算法地面分割

目录 一、算法原理1、实现流程2、参考文献二、代码实现三、结果展示四、测试数据一、算法原理 1、实现流程 1、格网示意图 2、计算格网行列数 公式中的特殊符号为向上取整,

el-tree结合el-switch实现状态切换

<template><div><el-col :span"24"><el-card class"tree-card"><div class"sketch_content selectFile"><span class"span_title">组织列表 </span><div style"display: flex; jus…

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷D

1、有一袋巧克力棒被摔倒了地上&#xff0c;其中只剩三分之一是完整的&#xff0c;而其它的每一根都断成两段。在这袋内所有的巧克力棒&#xff08;包括完整与断裂的&#xff09;中&#xff0c;请问长度不小于原来整根巧克力棒一半的根数至少占所有的根数的几分之几&#xff08…

《崩坏:星穹铁道》1.5仙舟罗浮-绥园全宝箱攻略

大家好&#xff0c;我是闲游盒小盒子&#xff0c;本篇来说下崩铁1.5版本仙舟罗浮-绥园的全宝箱攻略&#xff0c;共有19个宝箱加1个扑满&#xff1b;做完间章可获取前14个普通宝箱加2个精英怪宝箱&#xff0c;以及1个扑满&#xff1b;完成《狐斋志异》全任务可获得另外3个宝箱。…

数据结构 栈Stack的理解与C语言实现

栈&#xff0c;通俗的理解是叠盘子&#xff0c;如我们吃完饭洗碗洗盘子时&#xff0c;设盘子大小形状一样的&#xff0c;那么可以顺利的叠成一竖&#xff0c;每次我们洗好一个就叠在最上面push top&#xff0c;需要取用时候为了方便也是取最上面pop top&#xff0c;当然我们可以…

壹基金宣传进瑞金河背街社区 安全家园项目防灾减灾深入人心

11月16日下午&#xff0c;瑞金赋能公益、蓝天救援队等联合象湖镇河背街社区开展家庭安全计划社区活动包挑战赛活动暨壹基金安全家园项目防灾减灾宣传社区行活动。活动得到了救助儿童会北京代表处、壹基金、艾特公益、益心益意公益的指导&#xff0c;得到了阿里巴巴公益平台广大…

读像火箭科学家一样思考笔记04_第一性原理(下)

1. 来自无形规则的阻力 1.1. 无形规则 1.1.1. 僵化成规则的不必要习惯和行为 1.1.2. 不像有形的书面规则 1.1.2.1. 书面规则出现在标准操作流程中&#xff0c;可以修改或删除 1.1.3. 成文的规则可能会抗拒变革&#xff0c;但无形规则却更加顽固 1.1.4. 我们为强加在自己身…

【Q2—30min】

1.socket服务端创建过程 socket是应用层与TCP/IP协议族通信的中间软件抽象层&#xff0c;它是一组接口。在设计模式中&#xff0c;Socket其实就是一个门面模式&#xff0c;它把复杂的TCP/IP协议族隐藏在Socket接口后面&#xff0c;对用户来说&#xff0c;一组简单的接口就是全部…

从0开始学习JavaScript--JavaScript使用Promise

JavaScript中的异步编程一直是开发中的重要话题。传统的回调函数带来了回调地狱和代码可读性的问题。为了解决这些问题&#xff0c;ES6引入了Promise&#xff0c;一种更现代、更灵活的异步编程解决方案。本文将深入探讨JavaScript中如何使用Promise&#xff0c;通过丰富的示例代…