![WindowsC/C++加密解密实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/765/47216765/b_47216765.jpg)
上QQ阅读APP看书,第一时间看更新
2.2.8 BIO接口
在OpenSSL源代码中,I/O操作主要有网络操作和磁盘操作。为了方便调用者实现其I/O操作,OpenSSL源代码中将所有的与I/O操作有关的函数进行统一封装,即无论是网络还是磁盘操作,其接口是一样的。对于函数调用者来说,以统一的接口函数去实现其真正的I/O操作。
为了达到此目的,OpenSSL采用BIO抽象接口。BIO是在底层覆盖了许多类型I/O接口细节的一种应用接口,如果在程序中使用BIO,就可以和SSL连接、非加密的网络连接以及文件I/O进行透明的连接。BIO接口的定义如下:
![](https://epubservercos.yuewen.com/E90C37/26581487201329006/epubprivate/OEBPS/Images/Figure-P31_74106.jpg?sign=1739406684-C5NL3UnUwCfKknhQnhhdggApJxNDbqGW-0-d90d2646adb9650f977f8f52d659fd1a)
其中,BIO_METHOD结构体是各种函数的接口定义。如果是文件操作,此结构体如下:
![](https://epubservercos.yuewen.com/E90C37/26581487201329006/epubprivate/OEBPS/Images/Figure-P31_74107.jpg?sign=1739406684-WAmwn2n3QdvbZ06kKmbIgjDZgnvlcmCP-0-0e5620da9ed6ece2a7b0a720267245b7)
以上定义了7个文件操作的接口函数的入口。这7个文件操作函数的具体实体与操作系统提供的API有关。BIO_METHOD结构体如果用于网络操作,其结构体如下:
![](https://epubservercos.yuewen.com/E90C37/26581487201329006/epubprivate/OEBPS/Images/Figure-P31_74108.jpg?sign=1739406684-ybPS34tRWrtHnvGgyFhQUfIQYCdeGTU0-0-ce5d80f283881abfa672c5f5f69b3a5b)
它跟文件类型BIO在实现的动作上基本上是一样的。只不过是前缀名和类型字段的名称不一样。其实在像Linux这样的系统中,Socket类型跟fd类型是一样的,它们是可以通用的,但是,为什么要分开来实现呢?那是因为有些系统(如Windows系统)的Socket跟文件描述符是不一样的,所以,为了平台的兼容性,OpenSSL就将这两类分开来了。