【常见开源库的二次开发】基于openssl的加密与解密——openssl认识与配置(一)

目录:

目录:

一、什么是openssl?

二、所需要具备的开发工具

三、Windows上编译OpenSSL3.0

四、Linux编译openssl3.0


一、什么是openssl?

OpenSSL 是一个开源的软件库**,它提供了一系列加密工具和协议,主要用于实现安全通信** ,如在网络上的数据传输。它支持多种加密算法,包括对称加密、非对称加密、散列函数、伪随机数生成器、数字签名、密钥交换以及证书管理等。

在 2020 年 5 月 15 日,OpenSSL 发布了 3.0 版本的 Alpha2 测试版,这个版本的一个显著特点是增加了对中国国家密码管理局推荐的密码算法(国密)的支持,包括 SM2(非对称加密算法)、SM3(散列算法)和 SM4(对称加密算法)。

OpenSSL 不仅是一个独立的工具包,它还被广泛集成到其他软件中,以提供加密和安全通信功能。例如

  • **MySQL:**一个流行的开源关系数据库管理系统,可以使用 OpenSSL 来加密客户端和服务器之间的通信。
  • Python: 一种广泛使用的编程语言,其标准库中包含了使用 OpenSSL 的模块,如 ssl 模块,用于实现 SSL/TLS 加密。
  • **libevent:**一个事件通知库,它可以在网络编程中使用 OpenSSL 来提供加密的网络通信。

二、所需要具备的开发工具

安装好Vs2019社区版本

下载:openssl.vip

安装好ubuntu18.04系统

图2-1 vs2019社区版下载

图2-2 openssl-3.0.0源码下载

图2-3 openssl-3.0.0源码中获取到的文件

三、Windows上编译OpenSSL3.0

openssl.vip安装过程和工具下载

安装vs2019 perl

配置nasm

将这里的nasm压缩包解压

得到这些文件:

配置环境变量:

打开x86编译工具:

生成项目文件perl Configure VC-WIN32

perl Configure VC-WIN64A --prefix=%cd%\out

运行控制台x86 Native Tools Command Prompt for VS2019

nmake

重新生成makefile

cpp 复制代码
perl Configure VC-WIN632

出现没有找到dmake的错误

修改makefile文件

黄色标记处将:/O2 修改为 /Od,并注意去除 /debug项,否则生成的Release版本哦!

再次nmake && nmake install进行编译

生成以下目录:

四、Linux编译openssl3.0

Linux中的相关配置安装:

cpp 复制代码
root@100ask:~# apt-get install g++
cpp 复制代码
root@100ask:~# apt-get install make 
cpp 复制代码
root@100ask:~# apt-get install gdb
cpp 复制代码
root@100ask:~# apt-get install git
cpp 复制代码
root@100ask:~# apt-get install wget

下载openssl源码:

cpp 复制代码
root@100ask:~# wget https://www.openssl.org/source/openssl-3.0.0-alpha2.tar.gz

进行解压源代码:

cpp 复制代码
root@100ask:~# tar -xvf openssl-3.0.0-alpha2.tar.gz

进入子路径:

cpp 复制代码
root@100ask:~# cd openssl-3.0.0-alpha2

生成makefile

cpp 复制代码
root@100ask:~/openssl-3.0.0-alpha2# ./config

#三十二线程编译

cpp 复制代码
root@100ask:~/openssl-3.0.0-alpha2# make -j32

#安装so库,头文件和说明文档

cpp 复制代码
root@100ask:~/openssl-3.0.0-alpha2# make install

openssl命令行usr/local

cpp 复制代码
root@100ask:~# cd /usr/local

配置安装在usr/local/ssl

头文件/usr/local/include/openssl

so库文件usr/local/Iib

将此项目示例放入到Linux中:

**test_openssl.cpp :**生成随机数字

cpp 复制代码
#include  <iostream>
#include  <openssl/rand.h>
#include  <openssl/des.h>
#include  <openssl/bio.h>
#include  <time.h>
#include  <thread>

//  在Windows平台下,为了解决链接问题,需要包含applink.c
#ifdef  _WIN32
#include  <openssl/applink.c>
#endif

using  namespace  std;

int  main(int  argc,  char  *argv[])
{
      cout  <<  "测试  OpenSSL"  <<  endl;
      //  使用时间戳作为随机数的种子
      time_t  t  =  time(0);
      RAND_seed(&t,  sizeof(t));
      auto  mem_bio  =  BIO_new(BIO_s_mem());

      //  生成随机数
      unsigned  char  buf[16]  =  {0};
      int  len  =  sizeof(buf);
      int  re  =  RAND_bytes(buf,  len);
      for  (int  i  =  0;  i  <  len;  i++)
      {
          cout  <<  "["  <<  (int)buf[i]  <<  "]";
      }

      //  清理资源
      BIO_free(mem_bio);

      return  0;
}

使用 OpenSSL 库生成随机数的一个简单示例,代码首先打印出 "测试 OpenSSL",然后使用当前时间作为种子来初始化随机数生成器。接下来创建了一个内存 BIO 对象,并使用 RAND_bytes 函数生成了一个 16 字节的随机数。最后,代码遍历并打印出随机数的每个字节。在结束前,代码释放了分配给 BIO 对象的资源。

编写makefile

bash 复制代码
first_openss:test_openssl.cpp
        g++ $^ -o $@ -I/usr/local/include -L/usr/local/lib -lcrypto
相关推荐
openHiTLS密码开源社区1 天前
【密码学实战】openHiTLS passwd命令行:专业密码哈希生成工具
linux·密码学·哈希算法·ldap·密码策略·随机盐值
WTCLLB1 天前
netgear r6220 路由器,刷openwrt后,系统备份还原
linux·网络·智能路由器·openwrt
迎風吹頭髮1 天前
UNIX下C语言编程与实践38-UNIX 信号操作:signal 函数与信号捕获函数的编写
linux·c语言·unix
做运维的阿瑞1 天前
Linux系统性能监控与故障定位实战:CPU/内存/I/O/网络
linux·运维·网络
驱动探索者1 天前
车库到双子星:惠普的百年科技传奇
linux
爱思德学术1 天前
中国计算机学会(CCF)推荐学术会议-B(计算机网络):SenSys 2026
人工智能·计算机网络·嵌入式·传感系统
啊?啊?1 天前
1 玩转Linux命令行:基础文件操作实战教程
linux·服务器·基础指令
Code Warrior1 天前
【Linux】线程概念与控制(2)
linux
Java 码农1 天前
CentOS 7 上安装 PostgreSQL
linux·postgresql·centos
筑梦之路1 天前
CentOS 7 升级perl版本到5.40.3 —— 筑梦之路
linux·运维·centos