當前位置:
首頁 >
vc++网络安全编程范例(14)-openssl bio编程
發布時間:2023/12/20
45
豆豆
生活随笔
收集整理的這篇文章主要介紹了
vc++网络安全编程范例(14)-openssl bio编程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
OpenSSL整個軟件包大概可以分成三個主要的功能部分:密碼算法庫、SSL協議庫以及應用程序。OpenSSL的目錄結構自然也是圍繞這三個功能部分進行規劃的。
? 作為一個基于密碼學的安全開發包,OpenSSL提供的功能相當強大和全面,囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及SSL協議,并提供了豐富的應用程序供測試或其它目的使用。
BIO機制是OpenSSL提供的一種高層IO接口,該接口封裝了幾乎所有類型的IO接口,如內存訪問、文件訪問以及Socket等。這使得代碼的重用性大幅度提高,OpenSSL提供API的復雜性也降低了很多。
?
我們來用VC++實現使用各種source/sink類型bio的例子程序,請見代碼實現與注釋講解
#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; //建立一個讀/寫內存BIO bio = BIO_new(BIO_s_mem()); BIO_get_mem_ptr(bio, &buffer); BIO_puts(bio, "Hello World;"); printBuffer("bio內容:",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("現在的內容是:%s\n",outdata); //建立一個只讀內存BIO bio = BIO_new_mem_buf("這是一個只讀的緩沖區", -1); //獲取BIO中所指向的內存地址 BIO_get_mem_ptr(bio, &buffer); printBuffer("在內存中的內容",buffer); //阻止當bio關閉時破壞內存段 BIO_set_close(bio, BIO_NOCLOSE); BIO_free(bio); printBuffer("釋放bio對象之后",buffer); //另外一種方式建立只讀內存 databuffer = malloc(4096); //也可以給databuffer中寫入一些數據,然后再進行下一步。 bio = BIO_new_mem_buf(buffer, 4096); BIO_free(bio); //文件相關的BIO //創建一個和標準輸出關聯的bio bio = BIO_new(BIO_s_file()); BIO_set_fp(bio, stdout, BIO_NOCLOSE); BIO_printf(bio, "來自標準輸出的消息\n"); BIO_free(bio); //創建一個讀/寫文件bio,并且,當bio被釋放時,關閉此文件。 bio = BIO_new_file(TESTFILENAME, "w+"); BIO_puts(bio, "Hello World;\n"); //寫一些數據當文件里去 BIO_write(bio,testdata,(int)strlen(testdata)); BIO_printf(bio,"\ntest printf to file:%s=%d\n","length of testdata",strlen(testdata)); //必須將文件指針重置到頭部,否則后面讀不到數據。 BIO_seek(bio,0L); len=BIO_read(bio,outdata,sizeof(outdata)); outdata[len]=0; printf("===在文件中的內容[%s]====:\n%s" "=====================================\n",TESTFILENAME,outdata); BIO_free(bio); //BIO對 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對 //下面方式也可以,下面的語句等價于上面四句 //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對中讀取的數據:===\n%s" "\n================================\n",outdata); printf("\n click any key to continue."); getchar(); return 0; }
?
轉載于:https://www.cnblogs.com/yincheng01/archive/2011/12/17/2311153.html
總結
以上是生活随笔為你收集整理的vc++网络安全编程范例(14)-openssl bio编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux+3.10.0.tar.bz2
- 下一篇: c++ opencv数字图像处理:频率域