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

embedded/2024/10/18 12:24:09/

目录:

目录:

一、什么是openssl?

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

OpenSSL3.0-toc" style="margin-left:0px;">三、Windows上编译OpenSSL3.0

Linux%E7%BC%96%E8%AF%91openssl3.0-toc" style="margin-left:0px;">四、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源码中获取到的文件

OpenSSL3.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

perl Configure VC-WIN632

出现没有找到dmake的错误

修改makefile文件

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

再次nmake && nmake install进行编译

生成以下目录:

 

Linux%E7%BC%96%E8%AF%91openssl3.0">四、Linux编译openssl3.0

Linux中的相关配置安装:

root@100ask:~# apt-get install g++

 

root@100ask:~# apt-get install make 

root@100ask:~# apt-get install gdb

root@100ask:~# apt-get install git

 

root@100ask:~# apt-get install wget

下载openssl源码: 

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

进行解压源代码:

root@100ask:~# tar -xvf openssl-3.0.0-alpha2.tar.gz

 

进入子路径:

root@100ask:~# cd openssl-3.0.0-alpha2

生成makefile

root@100ask:~/openssl-3.0.0-alpha2# ./config

#三十二线程编译

root@100ask:~/openssl-3.0.0-alpha2# make -j32

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

root@100ask:~/openssl-3.0.0-alpha2# make install

openssl命令行usr/local

root@100ask:~# cd /usr/local

 

配置安装在usr/local/ssl

头文件/usr/local/include/openssl

so库文件usr/local/Iib

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

test_openssl.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>
#endifusing  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

first_openss:test_openssl.cppg++ $^ -o $@ -I/usr/local/include -L/usr/local/lib -lcrypto

 


http://www.ppmy.cn/embedded/58563.html

相关文章

差分进化算法

一、简介 差分进化&#xff08;DE&#xff09;是一种算法&#xff0c;通过创建一些随机个体&#xff0c;将它们与预定义的评估指标进行比较&#xff0c;并保留最好的个体&#xff0c;然后通过混合剩余个体的特征来创建新的个体&#xff0c;并重复这个过程来解决全局优化问题。…

新书速览|HTML5+CSS3 Web前端开发与实例教程:微课视频版

《HTML5CSS3 Web前端开发与实例教程&#xff1a;微课视频版》 本书内容 《HTML5CSS3 Web前端开发与实例教程&#xff1a;微课视频版》秉承“思政引领&#xff0c;立德树人”的教育理念&#xff0c;自然融入多维度、深层次的思政元素&#xff0c;全面对标企业和行业需求&#x…

游戏开黑语音-使用云服务器部署teamspeak服务(系统Ubuntu 20.04 LTS)

目录 前置物品服务器调整及部署1.重装系统2.换源3.下载teamspeak服务端并部署 连接服务器参考 前置物品 一台云服务器&#xff08;系统&#xff1a;Ubuntu 20.04 LTS) 服务器调整及部署 1.重装系统 在腾讯云官网的主机控制台内&#xff0c;选择重装系统 (由于之前为了快点和…

【Spring Boot】关系映射开发(三):多对多映射

《JPA 从入门到精通》系列包含以下文章&#xff1a; Java 持久层 API&#xff1a;JPA认识 JPA 的接口JPA 的查询方式基于 JPA 开发的文章管理系统&#xff08;CRUD&#xff09;关系映射开发&#xff08;一&#xff09;&#xff1a;一对一映射关系映射开发&#xff08;二&#…

实现基于Zookeeper的分布式协调服务

实现基于Zookeeper的分布式协调服务 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 什么是Zookeeper&#xff1f; Zookeeper是一个开源的分布式应用程序协调服务&#xff0c;提供高效的分布式数…

QT信号量与槽

文章目录 概述用系统生成新增一个信号量和槽代码方式信号量和槽的宏信号量和槽都用函数地址lamda表达式函数指针 槽和信号量函数信号量槽 小结 概述 这个内容是QT独有的&#xff0c;写的挺有意义的。之前写过一篇QT slots的函数&#xff0c;思来想去&#xff0c;觉得不是那么有…

2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片

2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片 1 目标效果视频 CamManager 2 CamManager读取本地文件时序 3 BD_Vision_Utility添加代码 3.0 导入链接库 BD_OperatorSets.dllSystem.Windows.Forms.dllOpencvSharp 3.1 导入VisionParam中创建的文件Util_FileO…

09.AOP-尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)

现有代码缺陷 针对带日志功能的实现类&#xff0c;我们发现有如下缺陷&#xff1a; 对核心业务功能有干扰&#xff0c;导致程序员在开发核心业务功能时分散了精力附加功能分散在各个业务功能方法中&#xff0c;不利于统一维护 解决思路 解决核心&#xff1a;解耦。把附加功能从…