Cipher类型BIO

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

(作者:DragonKing, Mail: wzhah@263.net ,公布于: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。

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

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

    SSL类型的BIO ---依据openssl doc\crypto\bio_f_ssl.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.net ,公布于:h ...

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

    接受(accept)类型BIO ---依据openssl doc\crypto\bio_s_accept.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.n ...

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

    文件描写叙述符(fd)类型BIO ---依据openssl doc\crypto\bio_s_fd.pod翻译和自己的理解写成 (作者:DragonKing Mailwzhah@263.net 公布于 ...

  4. openssl之BIO系列之20---缓冲(buffer)类型BIO

    缓冲(buffer)类型BIO ---依据openssl doc\crypto\bio_f_buffer.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.n ...

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

    BIO的IO操作函数     ---依据openssl doc/crypto/bio/bio_read.pod翻译和自己的理解写成          (作者:DragonKing Mail:wzhah ...

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

    BIO对的创建和应用 ---依据openssl doc/crypto/bio/bio_new_bio_pair.pod翻译和自己的理解写成 (作者:DragonKing Mail:wzhah@263. ...

  7. openssl之EVP系列之2---对称加密算法概述

    openssl之EVP系列之2---对称加密算法概述     ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.txt cipher.doc ...

  8. openssl之EVP系列之5---EVP_Encrypt系列函数具体解释(二)

    openssl之EVP系列之5---EVP_Encrypt系列函数详细解释(二)    ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.t ...

  9. openssl之EVP系列之1---算法封装

    openssl之EVP系列之1---算法封装     ---依据openssl doc/crypto/EVP.pod翻译和自己的理解写成     (作者:DragonKing, Mail: wzhah ...

随机推荐

  1. 【bzoj4399】魔法少女LJJ 并查集+权值线段树合并

    题目描述 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了LJJ感叹道“这里真是个迷人的绿色世界,空气清新.淡雅,到处散发着醉人的奶浆味: ...

  2. 刷题总结——次小生成树(bzoj1977 最小生成树+倍增)

    题目: Description 小 C 最近学了很多最小生成树的算法,Prim 算法.Kurskal 算法.消圈算法等等. 正当小 C 洋洋得意之时,小 P 又来泼小 C 冷水了.小 P 说,让小 C ...

  3. Windows + Eclipse 构建mahout运行环境

    mahout的完整运行还是需要hadoop的支持的,不过很多算法只需要能把hadoop的jar包加入到classpath之中就能正常运行. 比如我们在使用LogisticModelParameters ...

  4. MYSQL 存储过程 多表更新异常捕捉和异常处理方式

    今天在做MYSQL 存储过程 多表更新的功能   多表更新时候注意事项 1.首先是确保多表更新能够一次执行,途中没有哪个表的sql语句错误 2.上线后修改表结构及字段,请注意检查是否影响mysql 过 ...

  5. 使用CXF框架,发布webservice服务,并使用客户端远程访问webservice

    使用CXF框架,发布webservice服务,并使用客户端远程访问webservice  1. CXF介绍 :soa的框架    * cxf 是 Celtrix (ESB框架)和 XFire(webs ...

  6. 【C/C++】知识点

    1.C++中的参数传递机制:值传递.指针传递.引用传递 2.C++的内部类和外部类: 一个讲得不错的博客,不过不让转载:C++内部类 3.static 可以修饰局部变量.全局变量和函数. 不可修饰类! ...

  7. 强连通分量(Tarjan)模板

    贴模板,备忘. 模板1: #include<iostream> #include<cstring> #include<cmath> #include<cstd ...

  8. Swoole MySQL 连接池的实现

    目录 概述 代码 扩展 小结 概述 这是关于 Swoole 入门学习的第八篇文章:Swoole MySQL 连接池的实现. 第七篇:Swoole RPC 的实现 第六篇:Swoole 整合成一个小框架 ...

  9. 查看tomcat启动文件都干点啥---Catalina.java

    在前一章查看tomcat启动文件都干点啥---Bootstrap.java中我们得出结论,在Bootstrap中通过反射调用Catalina类中的getServer,start,stop,stopSe ...

  10. IOS7开发~NSAttributedString

    从 NSBundle 中读取rtf文本文件的内容,然后用UITextView展示: NSURL *url = [[NSBundle mainBundle] URLForResource:@" ...