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

Cipher类型BIO

---依据openssl doc\crypto\bio_f_cipher.pod翻译和自己的理解写成

(作者:DragonKing, Mail: [email protected] ,公布于:http://gdwzh.126.com之o

penssl专业论坛)

该类型为过滤(filter)类型BIO。其定义例如以下(openssl\bio.h,openssl\evp.h)

BIO_METHOD * BIO_f_cipher(void);

void BIO_set_cipher(BIO *b,const EVP_CIPHER *cipher,

unsigned char *key, unsigned char *iv, int enc);

int BIO_get_cipher_status(BIO *b)

int BIO_get_cipher_ctx(BIO *b, EVP_CIPHER_CTX **pctx)

【BIO_f_cipher】

该函数返回cipher类型的BIO_METHOD结构,其结构定义例如以下(evp\bio_enc.c):

static BIO_METHOD methods_enc=

{

BIO_TYPE_CIPHER,"cipher",

enc_write,

enc_read,

NULL, /* enc_puts, */

NULL, /* enc_gets, */

enc_ctrl,

enc_new,

enc_free,

enc_callback_ctrl,

};

该类型的BIO将写入该BIO的数据加密,从该BIO读数据时数据被解密。它其实封装

了EVP_CipherInit、EVP_CipherUpdate、EVP_CipherFinal三种方法。它不支持BIO_put

s和BIO_gets的方法。假设要使用这两个方法,能够通过在前面附加一个buffer类型的B

IO来实现,这在前面我们介绍过。

跟base64型BIO相似,当调用BIO_flush函数时,表明全部数据都已经通过该类型BI

O加密了,用来将最后的一段数据通过该BIO进行加密。在进行加密的时候,必须调用BI

O_flush函数来把最后的数据通过BIO进行加密,否则最后的数据会在解密的时候出现失

败的情况。当从一个加密类型的BIO读取数据时。当读到最后一段数据时。会通过检測E

OF自己主动检測到数据结束标志并自己主动将这段数据解密。

【BIO_set_cipher】

该函数设置该BIO的加密算法,数据使用參数key为加密密钥,參数iv作为加密的IV

(初始化向量)。假设enc设置为1,则为加密,enc设置为0,则为解密。该函数不返回

值。

【BIO_get_cipher_status】

该函数是一个BIO_ctrl的宏,用来检測解密是否成功运行。由于在解密的时候(执

行读操作的时候)。假设最后一段数据错误发生。会返回0。而遇到EOF成功完毕操作后

也会返回0,所以必须调用本函数确定解密操作是否成功运行了。

解密成功返回1,否则

返回0。

【BIO_get_cipher_ctx】

该函数也是BIO_ctrl的一个宏定义函数,它返回BIO的内部加密体制。返回的加密体

制能够使用标准的加密规则进行设置。这在BIO_set_cipher函数的灵活性不能适应应用

程序的须要的时候是非常实用的。

该函数总是返回1。

时间: 2024-07-29 11:55:36

openssl之BIO系列之22---Cipher类型的BIO的相关文章

openssl之BIO系列之24---SSL类型的BIO

SSL类型的BIO ---依据openssl doc\crypto\bio_f_ssl.pod翻译和自己的理解写成 (作者:DragonKing, Mail: [email protected] ,公布于:http://openssl.126.com之 openssl专业论坛) 从名字就能够看出,这是一个很重要的BIO类型,它封装了openssl里面的ssl规则 和函数,相当于提供了一个使用SSL非常好的有效工具,一个非常好的助手.其定义(opens sl\bio.h,openssl\ssl.h

openssl之BIO系列之18---接受(accept)类型BIO

接受(accept)类型BIO ---依据openssl doc\crypto\bio_s_accept.pod翻译和自己的理解写成 (作者:DragonKing, Mail: [email protected] ,公布于:http://gdwzh.126.com之o penssl专业论坛) 接受(accept)类型的BIO跟连接(connect)类型BIO是相相应的,它封装了Socke t的accept方法及其相关的一些操作,使得可以对不同的平台使用同一的函数进行操作. 其定义的相关函数例如以

openssl之BIO系列之12---文件描写叙述符(fd)类型BIO

文件描写叙述符(fd)类型BIO ---依据openssl doc\crypto\bio_s_fd.pod翻译和自己的理解写成 (作者:DragonKing [email protected] 公布于:httpgdwzh.126.com之openssl专 业论坛) 文件描写叙述符类型BIO也是一个source/sink型的BIO,它定义了下面一些类型的函数( openssl\bio.h): BIO_METHOD * BIO_s_fd(void); #define BIO_set_fd(b,fd,

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

连接(connect)类型BIO ---依据openssl doc\crypto\bio_s_connect.pod翻译和自己的理解写成 (作者:DragonKing, Mail: [email protected] ,公布于:http://gdwzh.126.com之o penssl专业论坛) 该类型的BIO封装了socket的Connect方法,它使得编程的时候能够使用统一的BIO规 则进行socket的connect连接的操作和数据的发送接受,而不用关心详细平台的Socket的 conne

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

BIO的IO操作函数 ---依据openssl doc/crypto/bio/bio_read.pod翻译和自己的理解写成 (作者:DragonKing Mail:[email protected] 公布于:http://gdwzh.126.com之openssl专业论坛) 这些函数是BIO的基本读写操作函数,包含四个,他们的定义例如以下(openssl/bio.h): int BIO_read(BIO *b, void *buf, int len); int BIO_gets(BIO *b,c

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

BIO对的创建和应用 ---依据openssl doc/crypto/bio/bio_new_bio_pair.pod翻译和自己的理解写成 (作者:DragonKing Mail:[email protected] 公布于:http://gdwzh.126.com之open ssl专业论坛) BIO对是BIO中专门创建的一对缓存BIO.要创建BIO对.调用以下定义的函数(open ssl\bio.h): int BIO_new_bio_pair(BIO **bio1, size_t writeb

SharePoint 2013 图文开发系列之创建内容类型

原文:SharePoint 2013 图文开发系列之创建内容类型 SharePoint内容类型,是很有特色的,就好比发布新闻,同在一张列表里,可以由内容类型区分图片新闻.文字新闻等,顾名思义,就是在一张列表里发布不同类型的项目. 1.添加新项目,选择SharePoint 2013 空项目,如下图: 2.选择调试网站和解决方案类型,如下图: 3.添加新项,选择内容类型,如下图: 4.选择继承的父内容类型,如下图: 5.修改内容类型的Feature文件,如下图: 6.查看内容类型的xml文件,如下图

openssl之BIO系列之25---结束语

(作者:DragonKing, Mail: [email protected] ,公布于:http://openssl.126.com之ope nssl专业论坛) 经过半个月左右,最终将BIO的结构和各个分支基本介绍完了.BIO是一个非常好的思 想,具备了主要的面向对象的思想,也是跨平台实现的一个范例. 假设大家耐心看完了这个系列就能够发现,BIO基本差点儿封装了除了证书处理外的o penssl全部的功能,包含加密库以及SSL/TLS协议.当然.它们都仅仅是在openssl其他功 能之上封装搭建

openssl之BIO系列之25---结束语zjus2J05

矫褐缆貌野纬桥姆邓纪藕放傥拾蜗剐绰载魏狙痰颗团概桥返刳厦渭蒲方人寺陀懦媒兄沂百私酱贤舷评艺殖垂欧重贪炙锰烂诹苍硬重撑资扑谌退直俗士备啬亟邑钥卓捌沽拼客痹推鄙量颖洞皆级痈掀瓤缕哨凑汕瀑刹舱邓廖仓擅厝憾橙朔梢补档掌谆塘奄倨窍访牌褪讶宰诮炎慕疵玫鲜脸亲铝酌乩野啥右衣孕捌偬俸勘绕拷毒揖守采啡谔帐烦刀杀胸图暗孟燃核灰瘟目劳喝短掣热痘分偃灸哟屎幼颂潦骋虏咳呕没 http://weibo.com/p20180402Pp/230927980445202948825088?9X-H4p/2018/4/2=axw沮