OPENSSL之BIO操作
最近一直在研究OPENSSL的API函数库,前几天一直研究ASN1编码,从昨天下午开始学习了BIO的操作,感觉这个BIO就是对普通的一些I/O操作进行了封装,当然,不仅仅是简单的封装,还涉及到很多的。它主要包含两个类型,一个是filter类型,一个是source/sink类型,个人认为filter类型是进行相应的操作,譬如加密,编码;而source/sink类型主要是进行文件的写入,读取,也就是IO操作。所以在ctrl上面,只有后者才具有相应的操作。同时,我在编写相应的测试程序的时候发现了一些问题,现总结如下,我编写了一个BIO操作链表,目的是对输入的字符进行base64编码,代码如下: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;在编译的时候,发现了一个问题,就是出现了一个错误OPENSSL_Uplink(100F0010,07): no
OPENSSL_Applink,然后查找了下解决如下:1、从project菜单选择setting...
2、选择C++标签。
3、从"Category"下拉列表框选择"Code Generation"。
4、从"Use run-time
library"下拉列表框中选择正确的库(参考下表),为你的DEBUG和RELEASE版本执行这个步骤
(在左上的设置面板在两个之间改变)
Single
Threaded
/ML - MS VC++经常用这个作为新项目发行版本的默认设置
Debug Single
Threaded
/MLd - MS VC++经常用这个作为新项目调试版本的默认设置
Multithreaded
/MT
Debug
Multithreaded
/MTd
Multithreaded
DLL
/MD - OpenSSL默认用这个
Debug Multithreaded DLL
/MDd
注意Debug和Release库是不可相互交换的,如果你用/MD编译OpenSSL,你的程序必须用/MD,而不能用/MDd。
加载中,请稍候......