欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C++中OpenSSL動態(tài)鏈接庫的使用

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

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

測試代碼

以下測試代碼 main.c 將分別在Windows和Linux環(huán)境中編譯,該代碼的作用是計算給定文件的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上引用動態(tài)鏈接庫

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

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

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

 此時可以完成編譯,但無法在VS中運行,會出現(xiàn)以下問題,

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

 此時運行成功,

我們在命令行中手動運行可執(zhí)行文件。拷貝文件 libcrypto-1_1-x64.dll 到可執(zhí)行文件所在目錄,運行可執(zhí)行文件,計算源文件 main.c 的SHA256。可以得到其SHA256為,

BEA6D328EA77FE8367DE573879A0245E1D9D23AF2A165745EE1E4D05EC004037

我們通過工具CertUtil來進行驗證,可以得到相同的Hash值,

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

Linux上引用動態(tài)鏈接庫

 創(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表示庫文件目錄,-l表示要引用的庫文件標識(庫文件名:libcrypto.so,其標識為crypto,要去掉lib.so)。

運行可執(zhí)行文件,計算源文件main.cSHA256,

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

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

相關文章

  • C++ STL入門教程(7) multimap、multiset的使用

    C++ STL入門教程(7) multimap、multiset的使用

    這篇文章主要介紹了C++ STL入門教程第七篇,multimap一對多索引,multiset多元集合的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C語言深入探索動態(tài)內存分配的使用

    C語言深入探索動態(tài)內存分配的使用

    給數(shù)組分配多大的空間?你是否和初學C時的我一樣,有過這樣的疑問。這一期就來聊一聊動態(tài)內存的分配,讀完這篇文章,你可能對內存的分配有一個更好的理解
    2022-04-04
  • C++詳細講解模擬實現(xiàn)位圖和布隆過濾器的方法

    C++詳細講解模擬實現(xiàn)位圖和布隆過濾器的方法

    位圖(bitset)是一種常用的數(shù)據(jù)結構,常用在給一個很大范圍的數(shù),判斷其中的一個數(shù)是不是在其中。在索引、數(shù)據(jù)壓縮方面有很大的應用。布隆過濾器是由布隆提出的,它實際上是一個很長的二進制向量和一系列隨機映射函數(shù)。布隆過濾器可以用于檢索一個元素是否在一個集合中
    2022-06-06
  • VC實現(xiàn)將網址解析出所有ip地址的實例代碼

    VC實現(xiàn)將網址解析出所有ip地址的實例代碼

    這篇文章主要介紹了VC實現(xiàn)將網址解析出所有ip地址的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 深入分析C++模板特化與偏特化

    深入分析C++模板特化與偏特化

    這篇文章主要介紹了C++模板特化與偏特化的相關資料,幫助大家更好的理解和學習c++,感興趣的朋友可以了解下
    2020-08-08
  • 代碼講解C++繼承和派生

    代碼講解C++繼承和派生

    在本文中我們通過實例代碼給大家講解下C++繼承和派生相關知識點,需要的朋友們學習下。
    2019-02-02
  • C++數(shù)組指針和二維數(shù)組詳情

    C++數(shù)組指針和二維數(shù)組詳情

    這篇文章主要介紹了C++數(shù)組指針和二維數(shù)組,指針數(shù)組和二維數(shù)組在應用中常用于函數(shù)傳參,下面我們就來看看指針數(shù)組和二維數(shù)組在應用中的具體使用吧,需要的朋友可以參考一下
    2021-10-10
  • C語言深入講解函數(shù)參數(shù)的使用

    C語言深入講解函數(shù)參數(shù)的使用

    函數(shù)的參數(shù)分為形參和實參兩種。形參出現(xiàn)在函數(shù)定義中,在整個函數(shù)體內都可以使用,離開該函數(shù)則不能使用。實參出現(xiàn)在主調函數(shù)中,進入被調函數(shù)后,實參變量也不能使用
    2022-04-04
  • C語言實現(xiàn)可增容動態(tài)通訊錄詳細過程

    C語言實現(xiàn)可增容動態(tài)通訊錄詳細過程

    這篇文章主要為大家介紹了C語言實現(xiàn)簡易通訊錄的完整流程,此通訊錄還可以增容,并且每個環(huán)節(jié)都有完整代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-05-05
  • C語言--數(shù)字交換題目詳解

    C語言--數(shù)字交換題目詳解

    本文通過代碼給大家介紹c語言數(shù)字交換的題目,通過實例代碼給大家講解的很詳細,具有一定的參考借鑒價值,對c語言感興趣的朋友一起看看吧
    2021-08-08

最新評論