OPENSSL之BIO操作 (转)
最近一直在研究OPENSSL的API函数库,前几天一直研究ASN1编码,从昨天下午开始学习了BIO的操作,感觉这个BIO就是对普通的一些I/O操作进行了封装,当然,不仅仅是简单的封装,还涉及到很多的。它主要包含两个类型,一个是filter类型,一个是source/sink类型,个人认为filter类型是进行相应的操作,譬如加密,编码;而source/sink类型主要是进行文件的写入,读取,也就是IO操作。所以在ctrl上面,只有后者才具有相应的操作。同时,我在编写相应的测试程序的时候发现了一些问题,现总结如下,我编写了一个BIO操作链表,目的是对输入的字符进行base64编码,代码如下:
#include <stdio.h>
//#include <openssl/bio.h>
//#include <openssl/rsa.h>
#include <openssl/pem.h>
int main(int argc, char *argv[])
{
BIO* bio=NULL;
BIO* biofile=NULL;
char* readstr=NULL;
char mydata[]= "this is my test"; //要进行编码的字符
bio=BIO_new(BIO_f_base64());//filter类型,对输入的信息进行base64编码
// biofile=BIO_new_fp(stdout,BIO_NOCLOSE);//我的另外一个测试,输出到屏幕,标准的输入输出
biofile=BIO_new(BIO_s_file());//定义的一个文件输出
BIO_write_filename(biofile,"123.txt");//输出的目的
if(bio)
{
BIO_push(bio,biofile);//开始连接两个BIO
BIO_write(bio,mydata,sizeof(mydata));//向连接完毕的BIO写入数据
BIO_flush(bio);//这个很重要,如果没有这个,就无法把信息写到文件或者打印到计算机屏幕上,作用是把BIO内部的数据读出来
}
BIO_vfree(bio);//释放
// BIO_free(bio);
// BIO_free(biofile);
printf("ok\n");
return 0;
}