当前位置: 首页 > news >正文

【常见开源库的二次开发】基于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

perl Configure VC-WIN632

出现没有找到dmake的错误

修改makefile文件

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

再次nmake && nmake install进行编译

生成以下目录:

 

四、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

 

相关文章:

  • C/C++高性能网络库libhv
  • statswrapper.sh 对多个fastq/fasta文件进行基础信息计算
  • Python爬虫速成之路(1):获取网页源代码
  • Qt编程技巧小知识点(1)TCP缓存区数据读取
  • LabVIEW实现LED显示屏视觉检测
  • 相机光学(三十一)——暗房设置的要求
  • Java面试八股之Redis单线程为什么性能高
  • 禁止使用存储过程
  • EE trade:限价建仓是什么意思
  • 合合信息“大模型加速器”亮相2024世界人工智能大会
  • PCIe驱动开发(1)— 开发环境搭建
  • 前端面试39(关于git)
  • javaweb学习day1《HTML篇》--新浪微博(前端页面的创建思路及其HTML、css代码详解)
  • 目标检测基本标注工具-labelImg安装与使用
  • aws sap认证考试如何轻松通过
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Android开源项目规范总结
  • CSS居中完全指南——构建CSS居中决策树
  • CSS实用技巧
  • EOS是什么
  • golang 发送GET和POST示例
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • java 多线程基础, 我觉得还是有必要看看的
  • Javascript编码规范
  • js正则,这点儿就够用了
  • orm2 中文文档 3.1 模型属性
  • Otto开发初探——微服务依赖管理新利器
  • Quartz初级教程
  • RxJS: 简单入门
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 从重复到重用
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 第2章 网络文档
  • 关于List、List?、ListObject的区别
  • 关于字符编码你应该知道的事情
  • 官方解决所有 npm 全局安装权限问题
  • 基于 Babel 的 npm 包最小化设置
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 每天10道Java面试题,跟我走,offer有!
  • 区块链技术特点之去中心化特性
  • 我是如何设计 Upload 上传组件的
  • 阿里云重庆大学大数据训练营落地分享
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • # Redis 入门到精通(七)-- redis 删除策略
  • #100天计划# 2013年9月29日
  • $.ajax中的eval及dataType
  • (C++)八皇后问题
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Micro Framework初体验
  • .net2005怎么读string形的xml,不是xml文件。