前言

加密在开发中是必不可少的,然而加密的三方库中 OpenSSL 是不可忽视的存在,基本上哪里都有它。

它是一个开源的加密工具,实现了各种算法,比如:消息摘要,对称加密、非对称加密等等。

接下来就来了解一下使用 CMake 配合 OpenSSL 进行各种加密。

安装

我使用的是 Mac ,所以安装比较容易,使用 HomeBrew 就可以了

1
brew install openssl

配置项目

创建一个 CMake 项目

1
2
3
mkdir demo && cd demo
touch CMakeLists.txt
touch main.cpp

CMakeLists.txt 内容如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
cmake_minimum_required(VERSION 3.10.2)

set(APP_NAME openssl_demo)
project(${APP_NAME})

set(CMAKE_CXX_STANDARD 11)

# 查找 OpenSSL 包
find_package(OpenSSL REQUIRED)

if (OPENSSL_FOUND)
    message(STATUS "Found OpenSSL: ${OPENSSL_VERSION}")
else()
    message(FATAL_ERROR "Could not find OpenSSL")
endif()

# Add sources
file(GLOB SOURCES CONFIGURE_DEPENDS
  "${PROJECT_SOURCE_DIR}/main.cpp"
)

add_executable(${APP_NAME} ${SOURCES})

# 包含 OpenSSL 头文件路径
target_include_directories(${APP_NAME} PRIVATE ${OPENSSL_INCLUDE_DIRS})

# 链接 OpenSSL 库
target_link_libraries(${APP_NAME} PRIVATE OpenSSL::Crypto OpenSSL::SSL)

内容还是比较简单的,简单的配置了一下,然后把 OpenSSL 链接到程序里。

查看 OpenSSL 版本

我们的代码在 main.cpp 里,内容如下

1
2
3
4
5
6
7
#include <iostream>
#include <openssl/crypto.h>
using namespace std;
int main(int argc, char *argv[]) {
    cout << SSLeay_version(SSLEAY_VERSION) << endl;
    return 0;
}

编译执行

1
2
3
4
mkdir build && cd build
cmake ..
make
./openssl_demo

最后输出如下

1
OpenSSL 3.4.0 22 Oct 2024

顺便说一下不使用 CMake 的方式

main.cpp 的内容如下,稍微和上面的有点不一样

1
2
3
4
5
6
7
#include <iostream>
#include <openssl/opensslv.h>
using namespace std;
int main(int argc, char *argv[]) {
    cout << OPENSSL_VERSION_TEXT << endl;
    return 0;
}

编译执行

1
2
g++ main.cpp -lssl -lcrypto -I/opt/homebrew/opt/openssl/include -L/opt/homebrew/opt/openssl/lib
./a.out # 没有指定名字默认是 a.out

结果和上面的一样,就不贴了。

这里直接指定了 OpenSSL 的头文件的库的地址,不然会找不到,每个人的路径可能不一样要注意改成自己的。

总结

OpenSSL 还是非常重要的,不要求你会实现加解密的算法,但是使用还是要会的。