Windows环境下C++ 安装OpenSSL库 源码编译及使用(VS2019)

这篇具有很好参考价值的文章主要介绍了Windows环境下C++ 安装OpenSSL库 源码编译及使用(VS2019)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考文章https://blog.csdn.net/xray2/article/details/120497146

之所以多此一举自己写多一篇文章,主要是因为原文内容还是不够详细。而且我安装的时候碰到额外的问题。

一般情况下,引入别人的库,要么把代码直接搞进去,一起编译。要么引入库和头文件(就像MYSQL那样),都不复杂。问题就在于openssl官方不提供现成的dll和lib文件,下面的所有操作,都是为了这一步,剩下的就很简单了。但是网上找到的这个,又用奇奇怪怪的东西来编译(没错,是我孤陋寡闻),于是就搞到这么复杂了。

1.首先确认一下自己的代码是Win32的还是Win64的,我操作系统是64的,忘记程序不知道什么时候改为32的了,后来又重新搞了一遍。

2.openssl官方貌似不提供线程的dll和lib文件,可能是处于安全吧,反正不深究了。真的安装好像也没花什么时间

3.下载源码

官网下载地址

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

选择合适自己的版本,注意的是3.x和1.x版本相差巨大的。由于我们用的外网正式服已经装了1.x的版本,所以我下载的是1.1.1t版本。不过安装流程应该没区别的。

4. 安装Perl

官网地址: Strawberry Perl for Windows

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

 我也不知道这个东西具体起到什么作用,不过大佬们都用这个,照抄就好了。另外官网也有64和32两种版本。由于我要生成的是32版本的openssl,所以下载了32版本,不过我觉得应该不影响的。

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

看看环境变量有没有,没有的加一下咯。 

测试一下是否安装成功,用cmd执行一下 perl -v

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

5.安装NASM

官网地址:  https://www.nasm.us/

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

我点了win32的

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl 安装完之后,顺手配一下NASM

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

6.打开控制台 

根据需要编译的平台选择相应的控制台,64位的选择x64,32位的选择x86

 vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

 我选的是x86这个,64的可以选x64那个。令我费解的是既然这个是不是也不影响生成的版本的呢,因为下面的命令行是要填生成的是64还是32的。

第一步下载的openssl解压一下,放到E盘,这里我第一次操作的时候,是进入E盘,就输入命令行的。结果生成了一大堆东西在E盘,而且好像东西都乱了。所以搞了第二次的时候,我直接创建了一个叫xxx的文件夹,把解压的内容放到xxx里面。

例如:cd xxx/openssl

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

 另外创建了个common目录在xxx目录下。

我不知道哪一步出错会导致生成的东西全乱了。反正现在的目录结构等下是没有用的。所以建议按我这样写好了。

命令行需要进入的是openssl的目录

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

执行:

 perl Configure VC-WIN32 no-asm --debug --prefix=E:\xxx\common\openSSL --openssldir=E:\xxx\common\ssl

 具体参数在openssl解压的目录下有个 INSTALL 文件可以查看

32位:VC-WIN32

64位:VC-WIN64A

不使用汇编代码:no-asm

Debug:--debug

Release:--release(默认)

最后安装的目录:--prefix=E:\Common\OpenSSL

一些配置说明文件存放目录:--openssldir=E:\Common\SSL

 这里不深究了,借别人的图用一下

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

然后执行:

nmake

 要等几分钟,没什么特别明显的信息,就不截图了。

跟着继续,有些文章说这一步可以跳过

nmake test

这一步确实又多了几分钟

最后是生成,我也不知道上面是干嘛了

nmake install

lib文件在lib目录下,在编译和链接的时候会用到,由于我的目录年代久远,不惧参考意义,所以写怎么引入到工程了

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

dll文件在bin目录下,在启动运行的时候会用到。这个放在程序启动的那个目录就行了。

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

 引入的头文件

vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

 大概这样引入到工程vs使用openssl,网络通信,C++,ssl,c++,windows,openssl

 最后,来个测试咯。

头文件

#ifndef _GateApp_Test_SSLTestManager_H_
#define _GateApp_Test_SSLTestManager_H_
#include "Common/EngineHeader.h"


namespace GateApp
{
	class CSSLTestManager
	{
	private:
		CSSLTestManager() {};
		~CSSLTestManager() {};
	public:
		static CSSLTestManager* instance();


	public:
		string getMD5(const string& str);
		string getMAC();
		void test2();


		void runTestSSL();
	};
}


#endif // _GateApp_Test_SSLTestManager_H_

 cpp文件

#include "Test/SSLTestManager.h" 
#include <iostream>
#include "openssl/evp.h"

#include<iostream>
#include <WinSock2.h> 
#include "Iphlpapi.h" 
#include<string>
#include "openssl/md5.h"

using namespace std;
#pragma comment(lib,"Iphlpapi.lib")
#pragma comment(lib,"libcrypto.lib")
#pragma comment(lib,"libssl.lib")



GateApp::CSSLTestManager* GateApp::CSSLTestManager::instance()
{
	static CSSLTestManager _instance;
	return &_instance;
}



string GateApp::CSSLTestManager::getMD5(const string& str)
{

	unsigned char md[16] = { 0 };
	MD5_CTX md5;

	MD5_Init(&md5);
	MD5_Update(&md5, str.c_str(), str.size());
	MD5_Final(md, &md5);
	char buf[33] = { 0 };
	char tmp[3] = { 0 };
	string st;  //结果
	for (auto i = 0; i < 6; i++)
	{
		sprintf_s(tmp, "%02x", md[i]);   //转为u16进制
		strcat_s(buf, tmp);   //将tmp拼接到buf后
	}
	st = buf;
	//在字符串的第4个位置插入一个字符
	st.insert(4, "-");
	//在字符串的第8位置插入一个字符
	st.insert(8, "-");
	//删除最后一个字符
	st.erase(st.end() - 1);
	return st;
}

string GateApp::CSSLTestManager::getMAC()
{
	byte mac[8] = { 0 };
	PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
	unsigned long stSize = sizeof(IP_ADAPTER_INFO);
	int nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
	if (ERROR_BUFFER_OVERFLOW == nRel)
	{
		delete pIpAdapterInfo;
		pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
		nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
	}
	if (ERROR_SUCCESS == nRel)
	{
		while (pIpAdapterInfo)
		{
			memcpy(mac, pIpAdapterInfo->Address, 8);
			break;//获取到第一个网卡的MAC 
		}
	}
	if (pIpAdapterInfo)
		delete pIpAdapterInfo;

	char buf[33] = { 0 };
	char tmp[4] = { 0 };
	string MAC;
	for (DWORD i = 0; i < 6; i++)
	{
		sprintf_s(tmp, "%02x-", mac[i]);   //转为u16进制
		strcat_s(buf, tmp);                //将tmp拼接到buf后
	}
	MAC = buf;
	MAC = MAC.erase(MAC.size() - 1);     //去除最后一个“-”
	return MAC;
}

void GateApp::CSSLTestManager::test2()
{
	const char* src = "Test OpenSSL MD5!";
	unsigned char dst[0x10] = { 0 };
	unsigned int dst_len = 0x10;
	size_t src_len = strlen(src);

	EVP_MD_CTX* ctx;
	ctx = EVP_MD_CTX_new();
	EVP_MD_CTX_init(ctx);
	EVP_DigestInit(ctx, EVP_md5());
	if (EVP_DigestUpdate(ctx, src, src_len))
	{
		if (EVP_DigestFinal(ctx, dst, &dst_len))
		{
			EVP_MD_CTX_free(ctx);
		}
	}
	 
}

void GateApp::CSSLTestManager::runTestSSL()
{ 
	cout << "MAC地址加密:" << getMD5(getMAC()) << endl;
	test2();
	system("pause");
}

找个main函数调一下文章来源地址https://www.toymoban.com/news/detail-627736.html


int main(int argc, char* argv[])
{

	GateApp::CSSLTestManager::instance()->runTestSSL();
    return 0;
}

到了这里,关于Windows环境下C++ 安装OpenSSL库 源码编译及使用(VS2019)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为 Microsoft C++ 配置 VS Code在本教程中,您将配置 Visual Studio Code 以在 Windows 上使用 Microsoft Visual C++ 编译器和调试器

    在本教程中,您将配置 Visual Studio Code 以在 Windows 上使用 Microsoft Visual C++ 编译器和调试器。 配置完 VS Code 后,你将在 VS Code 中编译和调试一个简单的 Hello World 程序。本教程不教您有关 Microsoft C++ 工具集或 C++ 语言的详细信息。对于这些主题,网上有很多很好的资源。 如果您

    2024年02月10日
    浏览(57)
  • 如何在windows上安装Openssl环境

    首先在链接下载openssl安装版 openssl windows 我选择的是肥一点的版本 然后就是按向导步骤安装。 安装完后,首先要先设置下环境变量 我安装的路径是 接下来,我以我的windows11为例说明, 在任务栏开始菜单图标上右键【系统】-【高级系统设置】-【环境变量】-【系统变量】中

    2024年02月10日
    浏览(25)
  • c语言实现https客户端 源码+详细注释(OpenSSL下载,visual studio编译器环境配置)

    请参考:openssl下载安装教程 步骤:官网下载-安装到选定目录-配置环境变量-打开命令窗口检查是否安装成功 注意: 打开命令窗口(快捷键 win + r ,在弹出窗口内输入cmd按回车),输入命令openssl version如果显示openssl版本则表示安装成功。 我出现的问题:明明安装上了却显示

    2024年04月16日
    浏览(37)
  • VS2022编译安装Qt6.5源码

    包括安装VS2022,Windows SDK,Python3,这里就不再一一介绍了,需要说明的一点是如果要编译 QtWebEngine 和 QtPdf 两个组件的依赖问题,当然如果不需要,也可以不管它,则不会编译。 python库 html5lib : 使用 pip install html5lib 安装。 gperf、bison、flex 如果安装有Qt 5的Windows版本,比如

    2024年02月04日
    浏览(56)
  • 编译安装openssl及安装完openssl后使用 ssh -V 查看依然是旧版openssl原因

    Centos升级openssh8.8p1 1. 下载安装wget 2. 获取openssl源码包 3. 安装openssl 所需依赖 4. 解压编译openssl 5. 替换旧版openssl 6. 查看openssl版本 注: 安装完openssl后使用 ssh -V 查看依然是旧版openssl, 是因为openssh是rpm/yum安装的调用的openssl依旧是旧版,不影响使用。 如果看不顺眼可以编译升

    2024年02月16日
    浏览(46)
  • Windows GRPC源码编译C++库——详细步骤

    目录 前言: 一、环境准备 1.1、安装cmake 1.2、安装Perl 1.3、安装golang 1.4、安装Visual Studio (推荐2022) 1.5、安装git 1.6、安装yasm 1.7、安装,配置openssl库 二、源码下载 2.1、grpc源码下载 2.2、第三方库下载 三、编译源码 3.1、新建.build 3.2、生产解决方案 3.3、编译 错误1 错误2 错误3:

    2023年04月08日
    浏览(30)
  • Windows11环境下VS2019调用Pytorch语义分割模型(C++版)

             语义分割模型在训练时往往采用python脚本进行网络搭建和训练,并获得训练好的模型。为了提高效率方便整个工程项目部署,实际工程应用中通常希望使用C++编程语言调用训练好的网络模型。查询大量网络资料并踩过无数坑后,经实际测试实现了在window11环境下调用

    2024年02月14日
    浏览(34)
  • windows + Mingw32-make 编译 PoDoFo库,openssl, libjpeg, Msys2工具的使用

    参考: https://blog.csdn.net/sspdfn/article/details/104244306 https://blog.csdn.net/yaoyuanyylyy/article/details/17436303 https://blog.csdn.net/wxlfreewind/article/details/106492253 前期进行了各种摸索,由于Podofo依赖库比较多,所依赖的库都需要编译为Mingw版本,参考以上三篇博客,因为环境原因一直出现各种问题

    2024年02月06日
    浏览(31)
  • Windows 中使用 VS Code 编译 MPI 和 OpenMP 程序

    Win10下Microsoft MPI(MSMPI)的下载安装 - 知乎 (zhihu.com) (34条消息) Dev配置MPI运行环境(msmpi)和OpenMP环境(运行通过)_devc++ mpi配置_一点年羊的博客-CSDN博客 (39条消息) ubuntu下mpich的安装与使用_乌班图 可执行程序cpi_Wu_uuuu的博客-CSDN博客 检查gcc版本:gcc --version (GCC从4.2.0版本开始

    2024年02月06日
    浏览(29)
  • 【opencv C++版本】安装和学习 ==Windows下使用VSCode配置OpenCV开发环境

    ref:https://opencv.org/releases/ ref:https://www.cnblogs.com/ticlab/p/16817542.html c_cpp_properties.json 照着ref 没安装成功,先写个二分查找把 ref:https://docs.opencv.org/4.x/df/d65/tutorial_table_of_content_introduction.html nnd,用这个ref在ubuntu20.04 上安装成功了!!!咳咳咳 ref:https://blog.csdn.net/weixin_4479667

    2024年02月14日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包