日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

vc++网络安全编程范例(14)-openssl bio编程

發(fā)布時(shí)間:2023/12/20 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vc++网络安全编程范例(14)-openssl bio编程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

OpenSSL整個(gè)軟件包大概可以分成三個(gè)主要的功能部分:密碼算法庫(kù)、SSL協(xié)議庫(kù)以及應(yīng)用程序。OpenSSL的目錄結(jié)構(gòu)自然也是圍繞這三個(gè)功能部分進(jìn)行規(guī)劃的。

?  作為一個(gè)基于密碼學(xué)的安全開(kāi)發(fā)包,OpenSSL提供的功能相當(dāng)強(qiáng)大和全面,囊括了主要的密碼算法、常用的密鑰和證書(shū)封裝管理功能以及SSL協(xié)議,并提供了豐富的應(yīng)用程序供測(cè)試或其它目的使用。

BIO機(jī)制是OpenSSL提供的一種高層IO接口,該接口封裝了幾乎所有類(lèi)型的IO接口,如內(nèi)存訪(fǎng)問(wèn)、文件訪(fǎng)問(wèn)以及Socket等。這使得代碼的重用性大幅度提高,OpenSSL提供API的復(fù)雜性也降低了很多。

?

我們來(lái)用VC++實(shí)現(xiàn)使用各種source/sink類(lèi)型bio的例子程序,請(qǐng)見(jiàn)代碼實(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è)讀/寫(xiě)內(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中寫(xiě)入一些數(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, "來(lái)自標(biāo)準(zhǔn)輸出的消息\n"); BIO_free(bio); //創(chuàng)建一個(gè)讀/寫(xiě)文件bio,并且,當(dāng)bio被釋放時(shí),關(guān)閉此文件。 bio = BIO_new_file(TESTFILENAME, "w+"); BIO_puts(bio, "Hello World;\n"); //寫(xiě)一些數(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ì) //下面方式也可以,下面的語(yǔ)句等價(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)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。