记录一次Windows11安装并使用OpenSSL

一、版本说明

操作系统: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

最后就是激动人心的执行编译后的可执行文件:

aes_encrypt.exe

执行结果:
在这里插入图片描述

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值