一、版本说明
操作系统: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库实现AES加密
新建一个aes_encrypt.c文件,源码如下:
#include <openssl/aes.h>
#include <openssl/rand.h>
#include <stdio.h>
#include <string.h>
int main() {
// 原始数据
unsigned char text[] = "这是一个测试文本";
// 密钥
unsigned char aes_key[32];
RAND_bytes(aes_key, sizeof(aes_key)); // 生成随机密钥
// 加密的输出数据
unsigned char enc_out[sizeof(text)];
memset(enc_out, 0, sizeof(enc_out));
// 设置加密密钥
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
这时候编译出现报错,具体报错信息:
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参数。但是都没有解决。最终还是得我强大的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
最后的结论是因为我安装的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
最后就是激动人心的执行编译后的可执行文件:文章来源:https://www.toymoban.com/news/detail-858783.html
aes_encrypt.exe
执行结果:
文章来源地址https://www.toymoban.com/news/detail-858783.html
到了这里,关于记录一次Windows11安装并使用OpenSSL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!