最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C++中OpenSSL動(dòng)態(tài)鏈接庫(kù)的使用

 更新時(shí)間:2021年11月15日 15:14:04   作者:塵世中迷途小碼農(nóng)  
這篇文章主要介紹了OpenSSL動(dòng)態(tài)鏈接庫(kù)的使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在上一篇文章 OpenSSL動(dòng)態(tài)鏈接庫(kù)源碼安裝 中我們介紹了如何在Windows和Linux環(huán)境中編譯OpenSSL動(dòng)態(tài)鏈接庫(kù),這篇文章我們將介紹如何在C代碼中引用OpenSSL動(dòng)態(tài)鏈接庫(kù)。

測(cè)試代碼

以下測(cè)試代碼 main.c 將分別在Windows和Linux環(huán)境中編譯,該代碼的作用是計(jì)算給定文件的SHA256值,

#define _CRT_SECURE_NO_WARNINGS
 
#include <stdio.h>
#include <stdlib.h>
#include "openssl/sha.h"
 
void sha256_hash_string(unsigned char* hash, char* outputBuffer) {
	size_t i = 0;
	for (i = 0; i < SHA256_DIGEST_LENGTH; i++) {
		sprintf(outputBuffer + (i * 2), "%02X", hash[i]);
	}
}
 
int calc_sha256(char* filePath, char* output) {
	FILE* file = fopen(filePath, "rb");
	if (!file) {
		return 1;
	}
	unsigned char hash[SHA256_DIGEST_LENGTH];
	SHA256_CTX sha256;
	SHA256_Init(&sha256);
 
	int bufferSize = 1024;
	char* buffer = (char*)malloc(bufferSize * sizeof(char));
	if (buffer == NULL) {
		printf("Failed to invoke malloc function, buffer is NULL.\n");
		return 1;
	}
	int bytesRead = 0;
	while ((bytesRead = fread(buffer, sizeof(char), bufferSize, file))) {
		SHA256_Update(&sha256, buffer, bytesRead);
	}
	SHA256_Final(hash, &sha256);
 
	sha256_hash_string(hash, output);
	free(buffer);
	fclose(file);
	return 0;
}
 
int main(int argc, char** argv) {
	if (argc < 2) {
		printf("Please specify a file.\n");
		return 1;
	}
	char* filePath = argv[1];
	char calc_hash[65] = { 0 };
	int rt = calc_sha256(filePath, calc_hash);
	printf("SHA-256: %s\n", calc_hash);
	return rt;
}

Windows上引用動(dòng)態(tài)鏈接庫(kù)

創(chuàng)建VS工程,添加代碼,

 配置頭文件和lib(注:是文件libcrypto.lib所在的目錄,而不是libcrypto-1_1-x64.dll的目錄)的引用目錄,Project -> SHA256 Properties -> VC++ Directories,

 添加文件 libcrypto.lib,Project -> SHA256 Properties -> Linker -> Input,

 此時(shí)可以完成編譯,但無(wú)法在VS中運(yùn)行,會(huì)出現(xiàn)以下問(wèn)題,

該錯(cuò)誤提示無(wú)法找到dll文件,需要將dll目錄添加到運(yùn)行時(shí)環(huán)境中,Project -> SHA256 Properties -> Debugging,

 此時(shí)運(yùn)行成功,

我們?cè)诿钚兄惺謩?dòng)運(yùn)行可執(zhí)行文件??截愇募?strong> libcrypto-1_1-x64.dll 到可執(zhí)行文件所在目錄,運(yùn)行可執(zhí)行文件,計(jì)算源文件 main.c 的SHA256。可以得到其SHA256為,

BEA6D328EA77FE8367DE573879A0245E1D9D23AF2A165745EE1E4D05EC004037

我們通過(guò)工具CertUtil來(lái)進(jìn)行驗(yàn)證,可以得到相同的Hash值,

注:使用VS編譯時(shí)需要指定lib文件libcrypto.lib,該文件本質(zhì)上是DLL文件libcrypto-1_1-x64.dll的描述,在這里并不是靜態(tài)鏈接庫(kù)文件。不完全清楚VS為什么一定需要該文件,使用gcc在Windows或Linux上編譯時(shí)不需要該lib文件,只需指定DLL文件即可。

Linux上引用動(dòng)態(tài)鏈接庫(kù)

 創(chuàng)建目錄: /home/sunny/work/build/SHA_256,將源文件 main.c 拷貝至該目錄,

執(zhí)行以下命令編譯源文件,生成可執(zhí)行文件 a.out,

gcc main.c -I/home/sunny/work/build/openssl/output/include -L/home/sunny/work/build/openssl/output/lib -lcrypto

這里,-I表示頭文件目錄,-L表示庫(kù)文件目錄,-l表示要引用的庫(kù)文件標(biāo)識(shí)(庫(kù)文件名:libcrypto.so,其標(biāo)識(shí)為crypto,要去掉lib.so)。

運(yùn)行可執(zhí)行文件,計(jì)算源文件main.cSHA256,

可以看出,我們得到了相同的HASH值。

到此這篇關(guān)于OpenSSL動(dòng)態(tài)鏈接庫(kù)的使用的文章就介紹到這了,更多相關(guān)OpenSSL動(dòng)態(tài)鏈接庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)在控制臺(tái)打印余弦曲線

    C語(yǔ)言實(shí)現(xiàn)在控制臺(tái)打印余弦曲線

    余弦曲線又叫余弦波(cosinwave),是一種來(lái)自數(shù)學(xué)三角函數(shù)中的余弦比例的曲線。這篇文章主要為大家介紹了如何在控制臺(tái)繪制余弦曲線,感興趣的可以了解一下
    2023-02-02
  • C++ std::list的merge()使用方式與分析

    C++ std::list的merge()使用方式與分析

    這篇文章主要介紹了C++ std::list的merge()使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 基于C語(yǔ)言實(shí)現(xiàn)學(xué)生選課系統(tǒng)

    基于C語(yǔ)言實(shí)現(xiàn)學(xué)生選課系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)學(xué)生選課系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C++11/14如何使用typedef和using定義類型別名和別名模版

    C++11/14如何使用typedef和using定義類型別名和別名模版

    這篇文章主要介紹了C++11/14如何使用typedef和using定義類型別名和別名模版
    2023-04-04
  • cin.get()和cin.getline()之間的區(qū)別

    cin.get()和cin.getline()之間的區(qū)別

    以下是對(duì)cin.get()和cin.getline()的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-09-09
  • C/C++?判斷計(jì)算機(jī)存儲(chǔ)器字節(jié)序(端序)的幾種方式

    C/C++?判斷計(jì)算機(jī)存儲(chǔ)器字節(jié)序(端序)的幾種方式

    字節(jié)序是計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)的格式,主存儲(chǔ)器(主存)的字節(jié)序?qū)Τ绦虻囊浦残院图嫒菪灾陵P(guān)重要,利用聯(lián)合體、指針、位移和掩碼等方法可以檢測(cè)和處理字節(jié)序問(wèn)題,對(duì)于內(nèi)存數(shù)據(jù)操作重要,也關(guān)系到跨平臺(tái)和網(wǎng)絡(luò)通信的數(shù)據(jù)處理
    2024-10-10
  • vscode中配置LeetCode插件的教程(愉快刷題)

    vscode中配置LeetCode插件的教程(愉快刷題)

    這篇文章主要介紹了vscode中配置LeetCode插件的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-03-03
  • 詳解VS2019 dumpbin查看DLL的導(dǎo)出函數(shù)

    詳解VS2019 dumpbin查看DLL的導(dǎo)出函數(shù)

    這篇文章主要介紹了詳解VS2019 dumpbin查看DLL的導(dǎo)出函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 詳解state狀態(tài)模式及在C++設(shè)計(jì)模式編程中的使用實(shí)例

    詳解state狀態(tài)模式及在C++設(shè)計(jì)模式編程中的使用實(shí)例

    這篇文章主要介紹了state狀態(tài)模式及在C++設(shè)計(jì)模式編程中的使用實(shí)例,在設(shè)計(jì)模式中策略用來(lái)處理算法變化,而狀態(tài)則是透明地處理狀態(tài)變化,需要的朋友可以參考下
    2016-03-03
  • C語(yǔ)言 超詳細(xì)介紹與實(shí)現(xiàn)線性表中的帶頭雙向循環(huán)鏈表

    C語(yǔ)言 超詳細(xì)介紹與實(shí)現(xiàn)線性表中的帶頭雙向循環(huán)鏈表

    帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復(fù)雜,一般用在單獨(dú)存儲(chǔ)數(shù)據(jù)。實(shí)際中使用的鏈表數(shù)據(jù)結(jié)構(gòu),都是帶頭雙向循環(huán)鏈表。另外這個(gè)結(jié)構(gòu)雖然結(jié)構(gòu)復(fù)雜,但是使用代碼實(shí)現(xiàn)以后會(huì)發(fā)現(xiàn)結(jié)構(gòu)會(huì)帶來(lái)很多優(yōu)勢(shì),實(shí)現(xiàn)反而簡(jiǎn)單
    2022-03-03

最新評(píng)論

盐津县| 武城县| 临夏县| 屏山县| 大名县| 宝清县| 北京市| 林西县| 台北县| 镶黄旗| 屏边| 清水县| 阿克苏市| 乐东| 临沧市| 岑巩县| 湖州市| 台南县| 龙胜| 即墨市| 交口县| 崇州市| 阿尔山市| 偏关县| 巫山县| 宣武区| 江西省| 甘肃省| 鄂尔多斯市| 苍南县| 铜梁县| 新竹市| 侯马市| 松溪县| 梅州市| 新和县| 康平县| 滨州市| 瑞丽市| 合水县| 云林县|