openssl之BIO系列之7---BIO链的操作

【 开发知识点 四 】BIO —— I/O 流抽象层 它的设计类似于 C 标准库中的文件 I/O(如 FILE*),但功能更为强大,能够支持多种数据来源和目标,包括内存缓冲区、文件、网络套接字等。例如,Base64 编码/解码 BIO(BIO_f_base64)、SSL/TLS BIO(BIO_s_ssl)、压缩 BIO 等。使用 BIO_new_socket 或 BIO_new_connect 创建,用于网络通信。:从链的尾部(最底层的 BIO)开始,逐级向上(经过每个 BIO 的处理)。使用 BIO_new_mem_buf 创建,用于在内存中读写数据。 阅读详情
    我在介绍BIO结构的时候说过,BIO结构其实是一个链式结构,单个BIO是只有一个环节的BIO链的特例,那么我们怎么构造或在一个BIO链中增加一个BIO,怎么从一个BIO链中删除一个BIO呢,那么本节就是专门讲述这个问题的。
    其实,在openssl中,针对BIO链的操作还是很简单的,仅仅包括两个函数(openssl/bio.h):
     BIO * BIO_push(BIO *b,BIO *append);
     BIO * BIO_pop(BIO *b);
    
    【BIO_push】
    该函数把参数中名为append的BIO附加到名为b的BIO上,并返回b。其实,openssl作者本身也认识到,BIO_push的函数名字可能会导致误会,因为BIO_push函数其实只是将两个BIO连接起来,而不是Push的功能,应该是join才对。
    我们举几个简单的例子说明BIO_push的作用,假设md1、md2是digest类型的BIO,b64是Base64类型的BIO,而f是file类型的BIO,那么如果执行操作
     BIO_push(b64, f);
    那么就会形成一个b64-f的链。然后再执行下面的操作:
     BIO_push(md2, b64);
     BIO_push(md1, md2);
    那么就会形成md1-md2-b64-f的BIO链,大家可以看到,在构造完一个BIO后,头一个BIO就代表了整个BIO链,这根链表的概念几乎是一样的。
    这时候,任何写往md1的数据都会经过md1,md2的摘要(或说hush运算),然后经过base64编码,最后写入文件f。可以看到,构造一条好的BIO链后,操作是非常方便的,你不用再关心具体的事情了,整个BIO链会自动将数据进行指定操作的系列处理。
    需要注意的是,如果是读操作,那么数据会从相反的方向传递和处理,对于上面的BIO链,数据会从f文件读出,然后经过base64解码,然后经过md1,md2编码,最后读出。
    【BIO_pop】
    该函数把名为b的BIO从一个BIO链中移除并返回下一个BIO,如果没有下一个BIO,那么就返回NULL。被移除的BIO就成为一个单个的BIO,跟原来的BIO链就没有关系了,这样你可以把它释放或连接到另一个BIO上去。可以看到,如果是单个BIO的时候,该操作是没有任何意义的。
    如果你执行操作:
     BIO_pop(md2);
    那么返回值将为b64,而md2从上述的链中移除,形成一个新的md1-b64-f的BIO链,对于数据操作来说,还是往md1读写,没有什么变化,但是底层处理过程已经发生变化了,这就是封装与透明的概念。可以看到,虽然BIO_pop参数只是一个BIO,但该操作直接的后果会对该BIO所在的链产生影响,所以,当BIO所在的链不一样的时候,其结果是不一样的。
    

    此外:BIO_push和BIO_pop操作还可能导致其它一些附加的结果,一些相关的BIO可能会调用一些控制操作,这些具体的细节因为各个类型的BIO不一样,在他们各自的说明中会有说明。


FW: http://blog.youkuaiyun.com/gdwzh/article/details/19203

OpenSSL_BIO接口整理以及Base64编码代码 阅读详情

相关推荐

openssl之BIO系列之6---BIO的IO操作函数

BIO的IO操作函数    ---根据openssl doc/crypto/bio/bio_read.pod翻译和自己的理解写成        (作者:DragonKing Mail:wzhah@263.net 发布于:http://gdwzh.126.com之openssl专业论坛)        这些函数是BIO的基本读写操作函数,包括四个,他们的定义如下(openssl/bio.h):   

内网安全与OpenSSL专栏 3243

BIO_push()详解

BIO的callback函数是实现BIO多态性的一个关键因素之一。 BIO提供的callback控制系列函数有五个,都是一些宏定义,下面是它的声明和定义(openssl/bio.h):      #define BIO_set_callback(b,cb)         ((b)->callback=(cb))      #define BIO_get_callback(b)       

qeshining的博客 2349

openssl之BIO系列之1---抽象的IO接口

BIO-抽象的IO接口        (作者:DragonKing Mail:wzhah@263.net 发布于:http://gdwzh.126.com openssl专业论坛)            其实包含了很多种接口,用通用的函数接口,主要控制在BIO_METHOD中的不通实现函数控制,    我初步估计了一下,大概有14种,包括6种filter型和8种source/sink型。     

内网安全与OpenSSL专栏 4075

base64编解码(openssl和c语言2种实现方式)

base64编解码(openssl和c语言2种实现方式)

hfwyydy的博客 1451

openssl之BIO系列之22---Cipher类型的BIO

Cipher类型BIO    ---根据openssl doc/crypto/bio_f_cipher.pod翻译和自己的理解写成        (作者:DragonKing, Mail: wzhah@263.net ,发布于:http://gdwzh.126.com之openssl专业论坛)        该类型为过滤(filter)类型BIO,其定义如下(openssl/bio.h,opens

内网安全与OpenSSL专栏 2365

BIO系列之3---BIO的声明和释放等基本操作

BIO的声明和释放等基本操作    ---根据openssl doc/crypto/bio/bio_new.pod翻译和自己的理解写成        (作者:DragonKing Mail:wzhah@263.net 发布于:gdwzh.126.com openssl专业论坛)        在BIO的基本操作系列函数中,他们用来BIO分配和释放操作,包括:    BIO_new, BIO_set

内网安全与OpenSSL专栏 5040

openssl之:BIO系列之7---BIO链的操作

BIO链的操作    ---根据openssl doc/crypto/bio/bio_push.pod翻译和自己的理解写成        (作者:DragonKing Mail:wzhah@263.net 发布于:http://gdwzh.126.com之openssl专业论坛)        我在介绍BIO结构的时候说过,BIO结构其实是一个链式结构,单个BIO是只有一个环节的BIO链的特例,那

内网安全与OpenSSL专栏 2000

openssl之BIO系列之9---BIO对的创建和应用

BIO对的创建和应用    ---根据openssl doc/crypto/bio/bio_new_bio_pair.pod翻译和自己的理解写成        (作者:DragonKing Mail:wzhah@263.net 发布于:http://gdwzh.126.com之openssl专业论坛)        BIO对是BIO中专门创建的一对缓存BIO,要创建BIO对,调用下面定义的函数(o

内网安全与OpenSSL专栏 2442

OpenSSL中文手册之BIO库详解

这一系文章参考了http://blog.youkuaiyun.com/xiaoting451292510/article/details/466495831 BIO 概述  其实包含了很多种接口,用通用的函数接口,主要控制在BIO_METHOD中的不同实现函数控制,包括6种filter型和8种source/sink型。   source/sink类型的BIO是数据源,例如,sokect BIO和文件BIO。

liao20081228的博客 4万+

openssl之BIO系列之17---连接(connect)类型BIO

连接(connect)类型BIO    ---根据openssl doc/crypto/bio_s_connect.pod翻译和自己的理解写成        (作者:DragonKing, Mail: wzhah@263.net ,发布于:httpgdwzh.126.com之openssl专业论坛)        该类型的BIO封装了socket的Connect方法,它使得编程的时候可以使用统一的

内网安全与OpenSSL专栏 4052

《Openssl之BIO系列之01-25,EVP系列之01-20》-技术详解.pdf

很不错的资料,学习OpenSSL中BIO,EVP必看资料

openssl之BIO系列之10---BIO链的定位操作

BIO链的定位操作     ---根据openssl doc/crypto/bio/bio_find_type.pod翻译和自己的理解写成          (作者:DragonKing Mail:wzhah@263.net 发布于:http://gdwzh.126.com之openssl专业论坛)          前面的一篇文章讲过BIO链的构造方法,这里讲的是在一个BIO链中,怎么

潇汀 8184

3D数学-动力学

3D数学-11-动力学 旋转运动学 二维旋转动力学 首先我们考虑最简单的情况: 我们将F施加在圆盘(忽略质量)上的一个点(质量为m)上 图中:F为我们施加的力,O是枢轴原点。 通过基本的运算,我们可以得到 F'= F*sinθ 那么切向加速度 a = F'/ m 切向加速度是线性速度的加速度,我们通过除以半径获得角加速度 α = a / r 现在,我们换一种方式,那就是通过杠杆臂的方式去施加力 为了能够计算出m点的角加速度,我们需要引入一个概念:扭矩 他的理解类似于力矩,公式如下 τ = Flsi

韩天衣的博客 2285

openssl中BIO的使用

本文主要介绍了BIO的结构和使用方法,并以示例方式给出了一种对BIO的封装,可为下一步与socket的相关操作结合,编写自定义的“加密/解密流”。

guxch的专栏 1412

【零基础】手把手教你使用Docker部署Springboot项目(详细版)

还不会使用Docker部署Springboot项目的小伙伴,不妨进来看看呗,希望文中内容对你有所帮助!

fengprogrammer的博客 2万+

Spring Boot应用Docker化实战:从Dockerfile编写到镜像推送完整流程

本文详细介绍了将Spring Boot应用Docker化的完整实战流程。从环境准备、项目审视,到编写高效且安全的Dockerfile,重点讲解了多阶段构建、镜像层优化、Spring Boot分层JAR等核心技巧,并涵盖了镜像构建、验证、调试以及最终推送至仓库并集成CI/CD的最佳实践,帮助开发者构建生产级Docker镜像。

butter的博客 1023

openssl之BIO系列之15---内存(mem)类型BIO

mem类型BIO    ---根据openssl doc/crypto/bio_s_mem.pod翻译和自己的理解写成        (作者:DragonKing, Mail: wzhah@263.net ,发布于:http://gdwzh.126.com 之openssl专业论坛)        内存(mem)类型BIO所定义的相关系列函数如下(openssl/bio.h):     BIO_M

内网安全与OpenSSL专栏 1万+

告别绕线!用Altium Designer从零设计一个PCB平面变压器(附3D模型)

本文详细介绍了如何使用Altium Designer从零设计一个PCB平面变压器,包括磁芯选型、电气参数计算、PCB设计实战技巧以及3D验证与生产输出。通过将绕组直接集成到PCB层中,配合嵌入式磁芯,实现了小型化、高功率密度的电源设计,适用于中低电流、高频应用场景。附3D模型,帮助读者快速掌握这一创新设计流程。

weixin_33716154的博客 442

OpenSSL BIO源码简析

OpenSSL BIO源码简析

Starr 1858

多模态大模型助力AI人工智能领域的智能决策

我们的目的是深入了解多模态大模型是怎样在AI人工智能领域帮助做出智能决策的。范围涵盖了多模态大模型的基本概念、工作原理、在不同场景下的应用,以及未来的发展方向等。接下来,我们会先介绍多模态大模型和智能决策的核心概念,再讲讲它们之间的关系。然后说说多模态大模型在智能决策中的算法原理和操作步骤,用数学公式来解释一下。接着通过一个项目实战案例让大家更直观地感受。之后看看多模态大模型在实际中的应用场景,推荐一些学习的工具和资源。最后探讨未来的发展趋势和挑战,进行总结并提出一些思考题。多模态大模型。

AIGC应用创新大全的博客 919

SonarQube 完整手册(2026 最新)

摘要: SonarQube是一款静态代码分析(SAST)平台,支持20+语言(如Java/Go/Python),提供Bug、漏洞、代码异味等检测,集成DevOps流水线。其架构包含服务端、扫描器和SonarLint插件。2026年四大版本:免费社区版(基础功能)、开发者版(多分支/PR分析)、企业版(合规治理)、数据中心版(高可用集群)。核心功能包括质量门禁(QualityGate)、密钥泄露检测及六大质量指标。部署推荐Docker+PostgreSQL,扫描支持Maven/CLI方式。

SmallBull的博客 670
上一篇: openssl之BIO系列之4---BIO控制函数介绍
下一篇: openssl之BIO系列之6---BIO的IO操作函数
coo1fish
博客等级 码龄14年 22粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值