一、版本說明
操作系統(tǒng):Windows11
MinGW-64版本:gcc version 8.1.0 (x86_64-posix-sjlj-rev0, Built by MinGW-W64 project)
OpenSSL版本:OpenSSL 3.2.0 23 Nov 2023 (Library: OpenSSL 3.2.0 23 Nov 2023)
二、MinGC和OpenSSL的安裝
MinGC安裝教程:https://zhuanlan.zhihu.com/p/76613134
OpenSSL安裝教程:https://www.cnblogs.com/dingshaohua/p/12271280.html
三、使用OpenSSL庫實現(xiàn)AES加密
新建一個aes_encrypt.c文件,源碼如下:
#include <openssl/aes.h>
#include <openssl/rand.h>
#include <stdio.h>
#include <string.h>
int main() {
// 原始數(shù)據(jù)
unsigned char text[] = "這是一個測試文本";
// 密鑰
unsigned char aes_key[32];
RAND_bytes(aes_key, sizeof(aes_key)); // 生成隨機密鑰
// 加密的輸出數(shù)據(jù)
unsigned char enc_out[sizeof(text)];
memset(enc_out, 0, sizeof(enc_out));
// 設(shè)置加密密鑰
AES_KEY enc_key;
AES_set_encrypt_key(aes_key, 256, &enc_key);
// 加密
AES_encrypt(text, enc_out, &enc_key);
printf("原文: %s\n", text);
printf("加密后: ");
for (size_t i = 0; i < sizeof(text); i++) {
printf("%x", enc_out[i]);
}
printf("\n");
return 0;
}
保存并使用gcc編譯。編譯命令
gcc aes_encrypt.c -o aes_encrypt -ID:\02-dev-tool\OpenSSL-Win64\include -LD:\02-dev-tool\OpenSSL-Win64\lib -lssl -lcrypto
這時候編譯出現(xiàn)報錯,具體報錯信息:
D:/02-dev-tool/x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lssl
D:/02-dev-tool/x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lcrypto
collect2.exe: error: ld returned 1 exit status
四、解決問題
查閱了一堆晚上的資料,基本沒有找到解決方案,大體都是讓我排查OpenSSL和MinGW是否安裝正確。還有就是讓我加上-I和-L參數(shù)。但是都沒有解決。最終還是得我強大的ChatGPT幫忙解答了。
這里有幾張截圖,是ChatGPT幫我解答的一些問題:
一共解惑了我的兩個問題
- 通過exe安裝的openssl,在libssl.lib搜索出來安裝的目錄下搜索出來三個,分別是…\VC\x64\MD,…\VC\x64\MDd,…\VC\x64\MT,…\VC\x64\MTd,該使用哪個?
- gcc aes_encrypt.c -o aes_encrypt -IC:\OpenSSL-Win64\include -LC:\OpenSSL-Win64\lib\VC\x64\MT -lssl -lcrypto
編譯還是報錯,cannot find -lssl cannot find -lcrypto
最后的結(jié)論是因為我安裝的MinGW識別不了.lib文件,需要將.def文件生成.a文件,最后再通過下邊的命令編譯成功。
gcc -fexec-charset=GBK aes_encrypt.c -o aes_encrypt -ID:\02-dev-tool\OpenSSL-Win64\include -LD:\02-dev-tool\OpenSSL-Win64\lib\VC\x64\MT D:\02-dev-tool\OpenSSL-Win64\lib\VC\x64\MT\libssl.a D:\02-dev-tool\OpenSSL-Win64\lib\VC\x64\MT\libcrypto.a
最后就是激動人心的執(zhí)行編譯后的可執(zhí)行文件:文章來源:http://www.zghlxwxcb.cn/news/detail-858783.html
aes_encrypt.exe
執(zhí)行結(jié)果:文章來源地址http://www.zghlxwxcb.cn/news/detail-858783.html
到了這里,關(guān)于記錄一次Windows11安裝并使用OpenSSL的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!