前言:
SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。库中包含很多加密函数,可以对数据进行加密。Openssl整个软件包主要包含三部分:SSL协议库、应用程序、密码算法库。下面主要介绍如何在Windows环境下下载安装Openssl,并配置环境,用C++调用其中的部分函数对数据进行加密。测试案例是:生成一个签名串,这个签名串是腾讯云短信服务中“发送短信”API中需要的必要参数。
下载安装:
下载地址:https://slproweb.com/products/Win32OpenSSL.html,我这里选择的版本是“Win64 OpenSSL v1.1.1L”选择了“EXE”格式,如果你的操作系统是32位或者你的项目是32位的话,就选择下载32位的安装包。安装过程比较简单直接点击下一步即可。
配置Windows环境:
配置环境变量:右键单击“我的电脑”->“属性”->“高级系统设置”,在弹窗中找到“高级”->“环境变量”,新建环境变量,变量名“Path”,变量值为“C:\Program Files\OpenSSL-Win64\bin”,变量值为安装目录;如图1-1所示;
图1-1
配置VS项目环境:
1、如果要在VS项目中使用SSL库,还需要在VS项目中进行相关设置。我这里使用的是VS2019创建的一个空的C++项目;添加一个“.cpp”文件“Source.cpp”,加入头文件“#include <openssl/sha.h>”和“#include <openssl/hmac.h>”,编译会报错并提示找不到头文件。
2、项目设置:项目-单击右键-属性,在属性面板中找到“VC++ Directories”->“Include Directories(包含目录)",添加新的目录“C:\Program Files\OpenSSL-Win64\include”;同样在库目录“Library Directories”下也添加一个新的目录“C:\Program Files\OpenSSL-Win64\lib”。如图1-2所示。最后配置静态链接库:选择连接器“Linker”->输入“Input”->添加依赖项“Additional Dependercies” 将“libssl.lib、libcrypto.lib”粘贴到空白处,点击确定即可。如图1-3所示。现在再编译项目即可编译通过。到此Openssl的环境配置就完成了,可以尝试调用一下其中的函数,后面会通过一个案例来使用Openssl库。
图1-2
图1-3
在UE4C++项目中使用
在 UE4项目中配置Openssl环境(UE4中引用第三方链接库)。 在UE4项目中无法按照文章“在Windows下配置Openssl环境”配置相关环境,UE4的项目属性中没有“链接器->输入”,所以无法指定第三方静态链接库。UE4引用第三方静态链接库需要在“.Build.cs”文件中配置。 首先在插件的根目录的下创建文件夹“ThirdParty”,然后去“Openssl”的安装目录下找到文件夹“OpenSSL-Win64”(我这里的目录为“C:\Program Files\OpenSSL-Win64”),最后将这个文件夹复制到“ThirdParty”中,并保留文件夹“Include”、“Lib”两个文件夹,其余全删除。如图1-4所示。
图1-4
在VS工程模块中的“.build.cs”文件中加载第三方静态链接库,代码如下所示。
// Some copyright should be here… using System.IO; using UnrealBuildTool;
public class SimpleHttp : ModuleRules { /——————Begin——————/ private string ModulePath { // get { return Path.GetDirectoryName(RulesCompiler.GetModuleFilename(this.GetType().Name)); } get { return ModuleDirectory; } }
private string ThirdPartyPath { get { return Path.GetFullPath(Path.Combine(ModulePath, “../../ThirdParty/”)); } } private string MyLibPath //第三方库MyTestLib的目录 { get { return Path.GetFullPath(Path.Combine(ThirdPartyPath, “OpenSSL-Win64”)); } } /——————End——————/
public SimpleHttp(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
|
|
然后编译会报错显示“UI”定义重复了,根据报错打开Openssl库中对应的头文件“ossl_Type.h”,在第144行处: 由 typedef struct ui_st UI; 改为(可以改为任意名) typedef struct ui_st UI_L;
改完后重新编译即可。