vc++网络安全编程范例(14)-openssl bio编程
生活随笔
收集整理的這篇文章主要介紹了
vc++网络安全编程范例(14)-openssl bio编程
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
OpenSSL整個(gè)軟件包大概可以分成三個(gè)主要的功能部分:密碼算法庫(kù)、SSL協(xié)議庫(kù)以及應(yīng)用程序。OpenSSL的目錄結(jié)構(gòu)自然也是圍繞這三個(gè)功能部分進(jìn)行規(guī)劃的。
? 作為一個(gè)基于密碼學(xué)的安全開發(fā)包,OpenSSL提供的功能相當(dāng)強(qiáng)大和全面,囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及SSL協(xié)議,并提供了豐富的應(yīng)用程序供測(cè)試或其它目的使用。
BIO機(jī)制是OpenSSL提供的一種高層IO接口,該接口封裝了幾乎所有類型的IO接口,如內(nèi)存訪問、文件訪問以及Socket等。這使得代碼的重用性大幅度提高,OpenSSL提供API的復(fù)雜性也降低了很多。
?
我們來用VC++實(shí)現(xiàn)使用各種source/sink類型bio的例子程序,請(qǐng)見代碼實(shí)現(xiàn)與注釋講解
#include "commonlib.h" #include <stdio.h> #include <stdlib.h> #include <openssl/crypto.h> #include <openssl/err.h> void printBuffer(const char* msg,BUF_MEM *buffer) { if(buffer->length<buffer->max) { buffer->data[buffer->length]=0; } printf("%s:[%s]\n",msg,buffer->data); } #define TESTFILENAME "testfilebio.txt" int main(int argc, char *argv[]) { char testdata[]="a whole new world"; char outdata[256]; BIO *bio,*pair_0,*pair_1; BUF_MEM *buffer=NULL; void *databuffer=NULL; //建立一個(gè)讀/寫內(nèi)存BIO bio = BIO_new(BIO_s_mem()); BIO_get_mem_ptr(bio, &buffer); BIO_puts(bio, "Hello World;"); printBuffer("bio內(nèi)容:",buffer); //write some data into it BIO_write(bio,testdata,(int)strlen(testdata)); int len=BIO_read(bio,outdata,sizeof(outdata)); outdata[len]=0; printf("現(xiàn)在的內(nèi)容是:%s\n",outdata); //建立一個(gè)只讀內(nèi)存BIO bio = BIO_new_mem_buf("這是一個(gè)只讀的緩沖區(qū)", -1); //獲取BIO中所指向的內(nèi)存地址 BIO_get_mem_ptr(bio, &buffer); printBuffer("在內(nèi)存中的內(nèi)容",buffer); //阻止當(dāng)bio關(guān)閉時(shí)破壞內(nèi)存段 BIO_set_close(bio, BIO_NOCLOSE); BIO_free(bio); printBuffer("釋放bio對(duì)象之后",buffer); //另外一種方式建立只讀內(nèi)存 databuffer = malloc(4096); //也可以給databuffer中寫入一些數(shù)據(jù),然后再進(jìn)行下一步。 bio = BIO_new_mem_buf(buffer, 4096); BIO_free(bio); //文件相關(guān)的BIO //創(chuàng)建一個(gè)和標(biāo)準(zhǔn)輸出關(guān)聯(lián)的bio bio = BIO_new(BIO_s_file()); BIO_set_fp(bio, stdout, BIO_NOCLOSE); BIO_printf(bio, "來自標(biāo)準(zhǔn)輸出的消息\n"); BIO_free(bio); //創(chuàng)建一個(gè)讀/寫文件bio,并且,當(dāng)bio被釋放時(shí),關(guān)閉此文件。 bio = BIO_new_file(TESTFILENAME, "w+"); BIO_puts(bio, "Hello World;\n"); //寫一些數(shù)據(jù)當(dāng)文件里去 BIO_write(bio,testdata,(int)strlen(testdata)); BIO_printf(bio,"\ntest printf to file:%s=%d\n","length of testdata",strlen(testdata)); //必須將文件指針重置到頭部,否則后面讀不到數(shù)據(jù)。 BIO_seek(bio,0L); len=BIO_read(bio,outdata,sizeof(outdata)); outdata[len]=0; printf("===在文件中的內(nèi)容[%s]====:\n%s" "=====================================\n",TESTFILENAME,outdata); BIO_free(bio); //BIO對(duì) pair_0= BIO_new(BIO_s_bio()); BIO_set_write_buf_size(pair_0, 4096); pair_1 = BIO_new(BIO_s_bio()); BIO_set_write_buf_size(pair_1, 4096); BIO_make_bio_pair(pair_0, pair_1);//組成BIO對(duì) //下面方式也可以,下面的語句等價(jià)于上面四句 //BIO_new_bio_pair(&pair_0, 4096, &pair_1, 4096);//identical to above 4 lines BIO_write(pair_0,testdata,(int)strlen(testdata)); memset(outdata,0,sizeof(outdata)); len=BIO_read(pair_1,outdata,sizeof(outdata)); outdata[len]=0; printf("=====從bio對(duì)中讀取的數(shù)據(jù):===\n%s" "\n================================\n",outdata); printf("\n click any key to continue."); getchar(); return 0; }
?
轉(zhuǎn)載于:https://www.cnblogs.com/yincheng01/archive/2011/12/17/2311153.html
總結(jié)
以上是生活随笔為你收集整理的vc++网络安全编程范例(14)-openssl bio编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux+3.10.0.tar.bz2
- 下一篇: 织梦(DEDECMS)首页调用相关投票的