中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

營業(yè)執(zhí)照怎么做增項 在網(wǎng)站上操作網(wǎng)站搭建公司

營業(yè)執(zhí)照怎么做增項 在網(wǎng)站上操作,網(wǎng)站搭建公司,自己有服務(wù)器和域名怎么做網(wǎng)站,網(wǎng)站改版后seo該怎么做文章目錄 openssl3.2 - exp - zlib概述筆記命令行實現(xiàn)程序?qū)崿F(xiàn)備注 - 壓縮時無法base64壓縮時無法帶口令壓縮實現(xiàn) - 對buffer進行壓縮和解壓縮測試效果工程實現(xiàn)main.cppCOsslZlibBuffer.hCOsslZlibBuffer.cpp總結(jié)END openssl3.2 - exp - zlib 概述 客戶端和服務(wù)端進行數(shù)據(jù)交換…

文章目錄

    • openssl3.2 - exp - zlib
    • 概述
    • 筆記
    • 命令行實現(xiàn)
    • 程序?qū)崿F(xiàn)
    • 備注 - 壓縮時無法base64
    • 壓縮時無法帶口令壓縮
    • 實現(xiàn) - 對buffer進行壓縮和解壓縮
    • 測試效果
    • 工程實現(xiàn)
    • main.cpp
    • COsslZlibBuffer.h
    • COsslZlibBuffer.cpp
    • 總結(jié)
    • END

openssl3.2 - exp - zlib

概述

客戶端和服務(wù)端進行數(shù)據(jù)交換時,如果壓縮一下要交互的數(shù)據(jù),可以節(jié)省帶寬。
如果數(shù)據(jù)是文本型, 壓縮率特別大。

以前用zlib庫單獨實驗過,寫起來還挺麻煩的。

正好這次已經(jīng)將zlib特性加入了openssl(openssl3.2 - 編譯 - zlib.dll不要使用絕對路徑), 試一下用openssl來壓縮/解壓縮數(shù)據(jù)方便不?

筆記

命令行實現(xiàn)

// openssl zip help
openssl zlib --help// zip
openssl zlib -e -in test.txt -out test.txt.zlib -pass pass:my_pwd// unzip
openssl zlib -d -in test.txt.zlib -out test.txt.zlib.unzlib -pass pass:my_pwd

程序?qū)崿F(xiàn)

先看一下openssl.exe的實現(xiàn)

備注 - 壓縮時無法base64

如果選了zlib, 就不能選base64.
如果想zlib后,再base64, 需要單獨對輸出結(jié)果進行base64(https://lostspeed.blog.csdn.net/article/details/136881319).

		if (do_zlib)base64 = 0;

壓縮時無法帶口令壓縮

壓縮時口令不起作用,因為可以不帶口令解開。

openssl zlib -d -in test.txt.zlib -out test.txt.zlib.unzlib

如果想將壓縮后的內(nèi)容加密,需要自己單獨對壓縮后的內(nèi)容加密。

實現(xiàn) - 對buffer進行壓縮和解壓縮

測試效果

org:
0000 - 68 65 6c 6c 6f 20 6f 70-65 6e 73 73 6c 33 2e 32   hello openssl3.2
0010 - 20 7a 6c 69 62 0a                                  zlib.
zip:
0000 - 78 9c cb 48 cd c9 c9 57-c8 2f 48 cd 2b 2e ce 31   x..H...W./H.+..1
0010 - d6 33 52 a8 ca c9 4c e2-02 00 5e 4e 07 a7         .3R...L...^N..
unzip:
0000 - 68 65 6c 6c 6f 20 6f 70-65 6e 73 73 6c 33 2e 32   hello openssl3.2
0010 - 20 7a 6c 69 62 0a                                  zlib.
free mem_hook map, g_mem_hook_map.size() = 0, no openssl API call memory leak

工程實現(xiàn)

test prj is exp034_zlib
在這里插入圖片描述

main.cpp

/*!
* \file main.cpp
*/#include "ossl/my_openSSL_lib_v1.1.h"
#include <openssl/crypto.h>
#include <openssl/bio.h>#include <stdlib.h>
#include <stdio.h>
#include <assert.h>#include "COsslZlibBuffer.h"void my_openssl_app();int main(int argc, char** argv)
{setvbuf(stdout, NULL, _IONBF, 0); // 清掉stdout緩存, 防止調(diào)用printf時阻塞mem_hook();my_openssl_app();mem_unhook();return 0;
}void my_openssl_app()
{bool b_rc = false;int i_rc = 0;COsslZlibBuffer zlib;uint8_t szBuf[0x1000];int lenBuf = 0;uint8_t* pBufOut1 = NULL;int lenBufOut1 = 0;uint8_t* pBufOut2 = NULL;int lenBufOut2 = 0;strcpy((char*)szBuf, "hello openssl3.2 zlib\n");lenBuf = strlen((char*)szBuf);printf("org:\n");BIO_dump_fp(stdout, szBuf, lenBuf);b_rc = zlib.zip(szBuf, lenBuf, pBufOut1, lenBufOut1);assert(b_rc);printf("zip:\n");BIO_dump_fp(stdout, pBufOut1, lenBufOut1);b_rc = zlib.unzip(pBufOut1, lenBufOut1, pBufOut2, lenBufOut2);assert(b_rc);printf("unzip:\n");BIO_dump_fp(stdout, pBufOut2, lenBufOut2);assert(lenBufOut2 == lenBuf);i_rc = memcmp(szBuf, pBufOut2, lenBuf);assert(0 == i_rc);if (NULL != pBufOut1){OPENSSL_free(pBufOut1);pBufOut1 = NULL;}if (NULL != pBufOut2){OPENSSL_free(pBufOut2);pBufOut2 = NULL;}
}

COsslZlibBuffer.h

//! \file COsslZlibBuffer.h#ifndef __C_OSSL_ZLIB_BUFFER_H__
#define __C_OSSL_ZLIB_BUFFER_H__#include <stdlib.h>
#include <stdio.h>
#include <cstdint> // for uint8_t#ifndef IN
#define IN
#endif // !IN#ifndef OUT
#define OUT
#endif // !OUT#include "openssl/bio.h"class COsslZlibBuffer
{
public:COsslZlibBuffer();virtual ~COsslZlibBuffer();// 出參指針調(diào)用者負責釋放(OPENSSL_free())bool zip(IN uint8_t* pBuf, IN int lenBuf, OUT uint8_t*& pBufOut, OUT int& lenBufOut);bool unzip(IN uint8_t* pBuf, IN int lenBuf, OUT uint8_t*& pBufOut, OUT int& lenBufOut);private:bool zipOpt(bool isZip, IN uint8_t* pBuf, IN int lenBuf, OUT uint8_t*& pBufOut, OUT int& lenBufOut);size_t bio_get_length(BIO* bio);bool bio_to_buf(BIO* bio, uint8_t*& pBuf, int& lenBuf);
};#endif // #ifndef __C_OSSL_ZLIB_BUFFER_H__

COsslZlibBuffer.cpp

//! \file COsslZlibBuffer.cpp#include "COsslZlibBuffer.h"#include "openssl/bio.h"
#include "openssl/comp.h"COsslZlibBuffer::COsslZlibBuffer()
{}COsslZlibBuffer::~COsslZlibBuffer()
{}bool COsslZlibBuffer::zip(IN uint8_t* pBuf, IN int lenBuf, OUT uint8_t*& pBufOut, OUT int& lenBufOut)
{return zipOpt(true, pBuf, lenBuf, pBufOut, lenBufOut);
}bool COsslZlibBuffer::unzip(IN uint8_t* pBuf, IN int lenBuf, OUT uint8_t*& pBufOut, OUT int& lenBufOut)
{return zipOpt(false, pBuf, lenBuf, pBufOut, lenBufOut);
}bool COsslZlibBuffer::zipOpt(bool isZip, IN uint8_t* pBuf, IN int lenBuf, OUT uint8_t*& pBufOut, OUT int& lenBufOut)
{bool b_rc = false;BIO* bio_zip = NULL;BIO* bio_in = NULL;BIO* bio_out = NULL;BIO* bio_read = NULL;BIO* bio_write = NULL;uint8_t szBuf[0x1000];int iCntRead = 0;int iCntWasWrite = 0;do {if ((NULL == pBuf) || (lenBuf <= 0)){break;}lenBufOut = 0;bio_zip = BIO_new(BIO_f_zlib());if (NULL == bio_zip){break;}bio_in = BIO_new_mem_buf(pBuf, lenBuf);if (NULL == bio_in){break;}bio_out = BIO_new(BIO_s_mem());if (NULL == bio_out){break;}if (isZip){bio_read = bio_in;bio_write = BIO_push(bio_zip, bio_out);  // write to bio link header, out form bio link tail}else {bio_read = BIO_push(bio_zip, bio_in);bio_write = bio_out;}do {iCntRead = BIO_read(bio_read, szBuf, (int)sizeof(szBuf));if (iCntRead <= 0){break;}iCntWasWrite = BIO_write(bio_write, szBuf, iCntRead);if (iCntWasWrite != iCntRead){goto END;}} while (true);if (!BIO_flush(bio_write)){break;}// 如果讀bio_write, 得到的是寫入的數(shù)據(jù), 而不是處理完的輸出數(shù)據(jù)if (!bio_to_buf(bio_out, pBufOut, lenBufOut)){break;}/*do_zlib = 1;enc = 1;saltlen = PKCS5_SALT_LEN;dgst = (EVP_MD *)EVP_sha256();iter = 1;if (do_zlib)base64 = 0;BIO *bzl = NULL;bzl = BIO_new(BIO_f_zlib()wbio = BIO_push(bzl, wbio);while (BIO_pending(rbio) || !BIO_eof(rbio)) {inl = BIO_read(rbio, (char *)buff, bsize);if (inl <= 0)break;if (!streamable && !BIO_eof(rbio)) {//	BIO_printf(bio_err, "Unstreamable cipher mode\n");//	goto end;//}//if (BIO_write(wbio, (char*)buff, inl) != inl) {//	BIO_printf(bio_err, "error writing output file\n");//	goto end;//}//if (!streamable)//break;//	}BIO_flush(wbio)if (enc)wbio = BIO_push(bzl, wbio);elserbio = BIO_push(bzl, rbio);*/b_rc = true;} while (false);END:if (NULL != bio_read){BIO_free_all(bio_read);bio_read = NULL;}if (NULL != bio_write){BIO_free_all(bio_write);bio_write = NULL;}return b_rc;
}size_t COsslZlibBuffer::bio_get_length(BIO* bio)
{size_t bio_length = 0;do {if (NULL == bio){break;}// BIO_seek(bio, 0);bio_length = BIO_ctrl_pending(bio);} while (false);return bio_length;
}bool COsslZlibBuffer::bio_to_buf(BIO* bio, uint8_t*& pBuf, int& lenBuf)
{bool b_rc = false;int i_rc = 0;do {if (NULL == bio){break;}lenBuf = (int)bio_get_length(bio);pBuf = (uint8_t*)OPENSSL_malloc(lenBuf + 1);if (NULL == pBuf){break;}pBuf[lenBuf] = '\0';i_rc = BIO_read(bio, pBuf, lenBuf);BIO_seek(bio, 0); // ! 讀完了, 將數(shù)據(jù)讀指針恢復(fù).b_rc = (i_rc == lenBuf);} while (false);return b_rc;
}

總結(jié)

用openssl做zip操作比直接用zlib庫操作方便多了。
openssl的封裝真優(yōu)秀。

END

http://www.risenshineclean.com/news/23266.html

相關(guān)文章:

  • 學網(wǎng)站建設(shè)多久能學會每天4元代發(fā)廣告
  • 建設(shè)網(wǎng)站程序百度seo關(guān)鍵詞排名優(yōu)化軟件
  • 集群注冊的公司可以做網(wǎng)站備案深圳互聯(lián)網(wǎng)公司排行榜
  • 莘縣網(wǎng)站建設(shè)電話一諾網(wǎng)絡(luò)推廣公司
  • 太原做網(wǎng)站公司運營長沙網(wǎng)絡(luò)推廣小公司
  • win7 iis配置asp.net網(wǎng)站品牌營銷策略分析
  • wordpress做圖片站網(wǎng)站建設(shè)深圳公司
  • 國外好的網(wǎng)站空間最近10條重大新聞
  • 國家官方網(wǎng)站seo關(guān)鍵詞排名優(yōu)化app
  • h5都用什么網(wǎng)站廣州百度seo 網(wǎng)站推廣
  • 怎樣自創(chuàng)網(wǎng)站寧波網(wǎng)站推廣優(yōu)化公司電話
  • 畢業(yè)設(shè)計軟件開發(fā)網(wǎng)站開發(fā)手機做網(wǎng)頁的軟件
  • 網(wǎng)站上的圖片帶店面是怎么做的怎么做市場推廣
  • 建立企業(yè)網(wǎng)站要多少錢足球比賽統(tǒng)計數(shù)據(jù)
  • 公司注冊網(wǎng)站官網(wǎng)電商如何推廣自己的產(chǎn)品
  • 網(wǎng)站開發(fā)的安全性原則優(yōu)化關(guān)鍵詞的作用
  • ubuntu wordpress 安裝成都網(wǎng)站優(yōu)化公司
  • 湖南做網(wǎng)站 要上磐石網(wǎng)絡(luò)seo網(wǎng)站有哪些
  • 自己買主機可以做網(wǎng)站嗎windows優(yōu)化工具
  • 想做一個什么樣的網(wǎng)站衡水seo優(yōu)化
  • 溫州建設(shè)seo搜索引擎優(yōu)化是什么意思
  • 東莞市網(wǎng)站公司海淀區(qū)seo搜索引擎優(yōu)化企業(yè)
  • 建網(wǎng)站大公司廈門人才網(wǎng)招聘官網(wǎng)
  • 旅游找什么網(wǎng)站好小程序開發(fā)平臺
  • 網(wǎng)上做賭博網(wǎng)站駕校推廣網(wǎng)絡(luò)營銷方案
  • 山東省建設(shè)廳網(wǎng)站地址一個新手怎么做推廣
  • 網(wǎng)絡(luò)技術(shù)網(wǎng)站seo網(wǎng)站權(quán)重
  • 自己做的網(wǎng)站主頁打開速度長春網(wǎng)絡(luò)營銷公司
  • wordpress 中文測試數(shù)據(jù)seo推廣有哪些公司
  • 做網(wǎng)站建站點搜索引擎營銷的簡稱是