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

openssl3.2 - 官方demo学习 - 索引贴

文章目录

    • openssl3.2 - 官方demo学习 - 索引贴
    • 概述
    • 笔记
    • 工程的搭建和调试环境
    • BIO
    • BIO - client-arg.c
    • BIO - client-conf.c
    • BIO - saccept.c
    • BIO - sconnect.c
    • BIO - server-arg.c
    • BIO - server-cmod.c
    • BIO - server-conf.c
    • BIO - 总结
    • certs
    • cipher
    • cipher - aesccm.c
    • cipher - aesgcm.c
    • cipher - aeskeywrap.c
    • cipher - ariacbc.c
    • cipher - 总结
    • END

openssl3.2 - 官方demo学习 - 索引贴

概述

如果要将openssl在自己的业务逻辑中用起来, 只从网上找零星的代码片段肯定不行的.
且不说人家写的好不好, 主要是我们不知道人家为啥那么写.
openSSL的API, 不同版本, API调用名称, 调用顺序. 是否为已经废弃, 都不同.
如果不是官方demo中推荐的写法, 如果有问题, 那也不好找问题. 作为研发, 我们比对能力还是强的.
如果是从网上找的代码片段, 在最新的openSS中是否能编译过, 都是个问题.

如果要用某个版本的openSSL(如果是新工程, 最好用新版的openSSL) , 看看官方提供的demo, 都清楚了.
如果是旧工程, 就要找对应的openSSL的版本的官方demo来看.
如果是从已有工程的旧openSSL版本迁移到最新的openSSL版本, 官方也有文档说明.
官方提供的Demo, 知识点比较全, 人家就是给用户写的很多具体例子(每个demo集中展示一个或几个小知识点), 用代码来展示openSSL库某个具体知识点具体咋用.

想将openssl3.2的官方demo过一遍, 过完之后, 就知道openssl能具体干啥了. 应用openssl库的编程细节也就知道了.
要想知道openssl3.2的编程细节, 看官方demo是最直接的方法.
在走读openssl demo实现时, 哪里有疑问, 可以自己写测试代码, 自己试试. 有自己的理解, 可以写注释给以后看.

当然, 在用openSSL干活之前, 密码学的书和资料也要稍微看看. 要不就不知道官方demo的知识背景.
如果能找到大佬出的教程, 初步看一下, 被大佬带一下, 让师傅领进门是最好的.
能出书和出教程的大佬, 人家也是看官方demo, 自己学出来的.

openSSL官方的demo都是在一个.c中实现的, 数了一下, 大概70个.
准备将这70个demo的源码走读完, 预计花7天.
等全部走读完, 业务逻辑上用到哪些openSSL操作, 就知道去哪个demo中找了.
移植(迁移)代码这事, 作为研发都熟悉, 不是问题.

笔记

工程的搭建和调试环境

VS2019 vc++ console
openSSL3.2安装到了c:\openssl_3d2
建立一个vs2019 c++ 控制台工程.
包含openssl3.2的头文件路径 => .;C:\openssl_3d2\include;
包含openssl3.2的库路径 => C:\openssl_3d2\lib;
删掉工程模板的.cpp实现
将官方实现(e.g. client-arg.c)放到工程中, 作为主实现
在.c中, 将库包含上, 将openssl/applink.c包进去.

#pragma comment(lib, "libcrypto.lib")
#pragma comment(lib, "libssl.lib")#include <openssl/applink.c> /*! for OPENSSL_Uplink(00007FF8B7EF0FE8,08): no OPENSSL_Applink */

根据编译选项, 加入一些编译宏, 使程序0错误0警告.

add _CRT_SECURE_NO_WARNINGS to VS2019 option

此时编译工程, 就是能编译过的. 0错误0警告
然后就是自己单步看看程序功能和API用法.
在这个过程中, 看看此demo包含哪些知识点?
这些知识点的API的建立, 调用, 释放的流程?
这3步中, 参数都是咋给定的?
自己能从这个demo中学到啥? 如果有, 可以加个注释以后看.
是不是自己也可以尝试改2句试试?
如果此demo要和其他demo配合用, 等过到相关demo时, 再打开这个demo配合用一下, 能更好的理解demo的实现.

BIO

BIO是openssl处理输入/输出的API, 可以处理文件, SSL连接的读写.

BIO - client-arg.c

TLS客户端(服务器连接串从命令行参数来), 向服务器get一个东西
openssl3.2 - 官方demo学习 - client-arg.c

BIO - client-conf.c

TLS客户端(服务器连接串从配置文件来), 向服务器get一个东西
openssl3.2 - 官方demo学习 - client-conf.c

BIO - saccept.c

建立TLSServer(使用了证书, 和证书中的私钥), 接收客户端的连接, 并将客户端发来的信息打印到屏幕
openssl3.2 - 官方demo学习 - saccept.c

BIO - sconnect.c

TLS客户端 - 使用根证书, 非阻塞, 向服务器要东西.
openssl3.2 - 官方demo学习 - saccept.c

BIO - server-arg.c

TLS服务器, 等客户端来连接; 如果客户端断开了, 通过释放bio来释放客户端socket, 然后继续通过bio读来aceept.

openssl3.2 - 官方demo学习 - server-arg.c

BIO - server-cmod.c

从配置文件中读参数, 建立TLS服务器, 死等客户端来连接. 客户端连接后, 打印客户端发来的内容.
配置文件格式有要求

openssl3.2 - 官方demo学习 - server-cmod.c

BIO - server-conf.c

建立TLS服务器, 参数从配置文件中来.通过SSL_CONF_CTX_set_flags()来决定读那些TLS参数
遍历配置文件, 通过SSL_CONF_cmd()来读取预期的配置项.
如果不是TLS直接用的参数(e.g. BIO), 自己从配置文件Item中赋值到变量.

openssl3.2 - 官方demo学习 - server-conf.c

BIO - 总结

官方BIOdemo工程就这7个.
可以看出, BIO主要是和TLS通讯相关的. 隐藏了socket操作, TLS两端通讯时, 直接用BIO读写.
BIO隐藏了数据读写2边的信息, 需要在BIO在建立和配置时, 才能知道具体操作的是文件, 内存还是socket.

certs

这个目录中没有c实现, 是官方展示如何使用openssl命令行来干活.
openssl3.2 - 官方demo学习 - certs

cipher

这个目录是算法调用的例子(e.g. 调用EVP接口进行对称加解密)

cipher - aesccm.c

AES-192-CCM
openssl3.2 - 官方demo学习 - cipher - aesccm.c

cipher - aesgcm.c

AES-256-GCM
在这个实验中验证了EVP_CIPHER_fetch()中算法名称字符串的来源定位.

每次看官方一个demo工程, 都能有收获, 这就很好了. 即使从一个demo中仅仅学到或者体会到一点新东西.
e.g. 因为是调用的EVP接口, 不同的加解密算法之间的应用, 差别不大(有时只是调用的算法名称字符串不同), 那么看不同的cipher, 除了第一个cipher demo, 其他的cipher demo工程, 收获就没那么大.

openssl3.2 - 官方demo学习 - cipher - aesgcm.c

cipher - aeskeywrap.c

AES-256-WRAP
经过实验 EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW); 不是必须的.
openssl3.2 - 官方demo学习 - cipher - aeskeywrap.c

cipher - ariacbc.c

ARIA-256-CBC
EVP_EncryptInit_x()的区别
EVP_EncryptInit() 参数为ctx, cipher, key, iv
EVP_EncryptInit_ex2() 参数为 ctx, cipher, key, iv, params[]
EVP_EncryptInit_ex() 参数为 ctx, cipher, engine_imp, key, iv
看了参数就知道:
如果不给params[], 就调用EVP_EncryptInit()
如果给params[], 就调用EVP_EncryptInit_ex2()
如果给engine, 就调用EVP_EncryptInit_ex()
openssl3.2 - 官方demo学习 - cipher - ariacbc.c

cipher - 总结

openssl3.2共支持130种算法
官方给的demos数量比较少, 这说明官方的算法API接口封装的比较好, 换用不同算法, 大多数只要改一下算法名称字符串即可.
官方给的例子全部使用EVP接口, 而不是底层具体的算法接口, 这样换算法时,非常方便.
取算法指针时, 都使用EVP_CIPHER_fetch(). 说明这是官方推荐的方法.

加解密流程(以加密为例):
EVP_CIPHER_CTX_new() 建立算法上下文.
EVP_CIPHER_fetch() 选择算法.
EVP_EncryptInit()/EVP_EncryptInit_ex2()/EVP_EncryptInit_ex() 算法初始化(给定key, iv, …)
EVP_EncryptUpdate() 连续加密buffer
EVP_EncryptFinal_ex() 加密结束
EVP_CIPHER_free() 释放算法
EVP_CIPHER_CTX_free() 释放算法上下文

END

相关文章:

openssl3.2 - 官方demo学习 - 索引贴

文章目录 openssl3.2 - 官方demo学习 - 索引贴概述笔记工程的搭建和调试环境BIOBIO - client-arg.cBIO - client-conf.cBIO - saccept.cBIO - sconnect.cBIO - server-arg.cBIO - server-cmod.cBIO - server-conf.cBIO - 总结certsciphercipher - aesccm.ccipher - aesgcm.ccip…...

textarea文本框根据输入内容自动适应高度

第一种&#xff1a; <el-input auto-completeoff typetextarea :autosize"{minRows:3,maxRows:10}" class"no-scroll"> </el-input> /* 页面的样式表 */ .no-scroll textarea {overflow: hidden; /* 禁用滚动条 */resize: none; /* 禁止用户…...

【JAVA基础--计算机网络】--TCP三次握手+四次挥手

三次握手四次挥手 写在前面1. 三次握手1.1 作用&#xff1a; 为了在不可靠的信道上建立起可靠的连接&#xff1b;1.2 建立过程1.3 面试提问 2. 四次挥手2.1 作用&#xff1a;为了在不可靠的网络信道中进行可靠的连接断开确认2.2 断开过程2.3 面试提问 写在前面 三次握手建立连…...

最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建

最近在尝试搭建 FFmpeg 开发环境时遇到一个蛋疼的事&#xff0c;Google 了 N 篇文章竟然没有一篇是可以跑起来的&#xff01; 少部分教程是给出了自我矛盾的配置&#xff08;是的&#xff0c;按照贴出来的代码和配置&#xff0c;他自己都跑不起来&#xff09;&#xff0c;大部…...

【漏洞复现】Hikvision SPON IP网络对讲广播系统存在命令执行漏洞CVE-2023-6895

漏洞描述 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。Hikvision Intercom Broadcasting System 3.0.3_20201113_RELEASE(HIK)版…...

微软为Windows内置记事本应用开发AI功能;2024年15个 AI 语音生成器

&#x1f989; AI新闻 &#x1f680; 微软为Windows内置记事本应用开发AI功能 摘要&#xff1a;微软正在开发一个新的生成式AI功能&#xff0c;名为"Cowriter"&#xff0c;用于Windows内置的记事本应用。该功能类似于画图应用中的"Cocreator"功能&#x…...

【C++进阶06】红黑树图文详解及C++模拟实现红黑树

一、红黑树的概念及性质 1.1 红黑树的概念 AVL树用平衡因子让树达到高度平衡 红黑树可以认为是AVL树的改良 通过给每个节点标记颜色让树接近平衡 以减少树在插入节点的旋转 在每个结点新增一个存储位表示结点颜色 可以是Red或Black 通过对任何一条从根到叶子的路径上 各个结点…...

2023年最严重的10起0Day漏洞攻击事件

根据谷歌公司威胁分析小组去年 7 月发布的报告显示&#xff0c;2022 年全球共有 41 个 0day 漏洞被利用和披露。而研究人员普遍认为&#xff0c;2023 年被利用的 0Day 漏洞数量会比 2022 年更高&#xff0c;这些危险的漏洞被广泛用于商业间谍活动、网络攻击活动以及数据勒索攻击…...

Linux之Iptables简易应用

文档形成时期&#xff1a;2009-2024年 和iptables打交道有15年了&#xff0c;经过无数实践后&#xff0c;形成一个简易应用文档。 文档主题是简易应用&#xff0c;所以其原理不详述了。 因软件世界之复杂和个人能力之限&#xff0c;难免疏漏和错误&#xff0c;欢迎指正。 文章目…...

树状结构查询 - 华为OD统一考试

OD统一考试 分值: 200分 题解: Java / Python / C++ 题目描述 通常使用多行的节点、父节点表示一棵树,比如: 西安 陕西 陕西 中国 江西 中国 中国 亚洲 泰国 亚洲 输入一个节点之后,请打印出来树中他的所有下层节点。 输入描述 第一行输入行数,下面是多行数据,每行以…...

版本控制系统教程

1.Git的基本介绍 1.1 Git的概念 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目.Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件.Git与常用的版本控制工具CVS&#xff0c;Subversion等不同&#xff…...

Java多线程并发篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、start 与 run 区别二、JAVA 后台线程三、什么是乐观锁前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、start 与 r…...

模型\视图一般步骤:为什么经常要用“选择模型”QItemSelectionModel?

一、“使用视图”一般的步骤&#xff1a; //1.创建 模型(这里是数据模型&#xff01;) tabModelnew QSqlTableModel(this,DB);//数据表 //2.设置 视图的模型(这里是数据模型&#xff01;) ui->tableView->setModel(tabModel); 模型种类&#xff1a; QStringListModel…...

C#,愚弄数(Hoax Number)的计算方法与源代码

一、愚弄数&#xff08;Hoax Number&#xff09; 愚弄数&#xff08;Hoax Number&#xff09;是一种组合数字, 其数字总和等于其不同质因数的数字总和。 注&#xff1a;1不被视为质数, 因此它不包含在不同质因数的总和中。 有些愚弄数&#xff08;Hoax Number&#xff09;数字也…...

c JPEG编码,此程序没有处现MCU中亮度分量的排序

#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/videodev2.h> //v4l2 头文件 #include <strin…...

前端规范扩展

前端编程规范是基于原有vue2基础上那套《编码风格及标准》上&#xff0c;应用于vue3、typescript、vite2基础上延伸出来的扩展补充&#xff0c;持续完善 一、编码规范 ESLint 代码检测工具 Pretter 代码格式化工具配合双校验代码 Git 规范 - 编码工具 vscode 同步参考文档中…...

【AI视野·今日NLP 自然语言处理论文速览 第七十二期】Mon, 8 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 8 Jan 2024 Totally 17 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers DeepSeek LLM: Scaling Open-Source Language Models with Longtermism Authors DeepSeek AI Xiao Bi, Deli Ch…...

RT-Thread基于AT32单片机的CAN应用

1 硬件电路 2 RT-Thread驱动配置 RT-Studio中没有CAN相关的图形配置&#xff0c;需要手动修改board.h。在board.h的末尾&#xff0c;增加相关的BSP配置。 #define RT_CAN_USING_HDR #define BSP_USING_CAN13 IO配置 at32_msp.c中的IO配置是PB9和PB10&#xff0c;掌上实验室V…...

LeetCode---121双周赛---数位dp

题目列表 2996. 大于等于顺序前缀和的最小缺失整数 2997. 使数组异或和等于 K 的最少操作次数 2998. 使 X 和 Y 相等的最少操作次数 2999. 统计强大整数的数目 一、大于等于顺序前缀和的最小缺失整数 简单的模拟题&#xff0c;只要按照题目的要求去写代码即可&#xff0c;…...

RT-Thread I/O设备模型

I/O设备模型 绝大部分的嵌入式系统都包括一些I/O&#xff08;Input/Output&#xff0c;输入/输出&#xff09;设备&#xff0c;例如仪器上的数据显示屏、工业设备上的串口通信、数据采集设备上用于保存数据的Flash或SD卡&#xff0c;以及网络设备的以太网接口等&#xff0c;都…...

CloudCompare——拟合空间球

目录 1.拟合球2.软件操作3.算法源码4.相关代码 本文由CSDN点云侠原创&#xff0c;CloudCompare——拟合空间球&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫与GPT生成的文章。 1.拟合球 源码里用到了四点定球&#xff0c;…...

哪个牌子的护眼台灯适合学生?2024护眼台灯推荐

不知道各位父母对孩子的视力健康有没有关注&#xff0c;我国儿童青少年的近视率高达52.7%&#xff0c;也就是说&#xff0c;平均是个儿童中就有五个儿童存在视力问题&#xff0c;而且近视发生年龄提前至3到7岁。作为一名眼部护理博主&#xff0c;孩子从小看书、看屏幕起&#x…...

适用于动态 IT 环境的服务器流量监控软件

服务器在网络性能中起着至关重要的作用&#xff0c;这意味着保持其最佳容量至关重要。企业需要将 AI、ML 和云技术融入其 IT 中&#xff0c;从而提供充分的敏捷性、安全性和灵活性&#xff0c;在这方面&#xff0c;服务器流量监控已成为当务之急。通过定期监控通信、跟踪流量上…...

Java的Jar包和War包

在Java中&#xff0c;JAR&#xff08;Java Archive&#xff09;和WAR&#xff08;Web Archive&#xff09;都是用于打包和分发Java应用程序的压缩文件格式。它们在不同的应用场景中使用&#xff1a; JAR&#xff08;Java Archive&#xff09;&#xff1a; 用途&#xff1a; 主要…...

第二十一章 javascript数据代理(数据劫持)

文章目录 一、数据劫持对象的访问器属性 二、Object.defineProperty()三、Proxy()四、补充1. Object类新增方法2. Array类新增方法 一、数据劫持 数据劫持&#xff1a;能够拦截到数据被使用或被修改的时机&#xff0c;在这个时机除了可以获取数据的值或对数据的值进行修改之外…...

苹果电脑RAW图像处理软件Capture One Pro 22 mac软件介绍

Capture One Pro 22 for mac是一款专业的RAW文件转换器和图像编辑软件&#xff0c;拥有更新的处理引擎、市场领先的性能和强大的新功能&#xff0c;可为 500 多台高端相机提供具有美丽色彩和令人难以置信的细节的终极图像质量。 Capture One Pro 22 for Mac版软件介绍 Capture…...

phpcms v9后台添加草稿箱功能

一、后台添加文章模板phpcms/modules/content/templates/content_add.tpl.php中94行增加”保存草稿“按钮&#xff1a; <div class"button"><input value"<?php echo L(save_draft);?>" type"submit" name"dosubmit_draf…...

机器人持续学习基准LIBERO系列5——获取显示深度图

0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新机器人持续学习基准LIBERO系列4——robosuite最基本demo 1.更改环境设置 LIBERO-master/l…...

Java 面试题 - 多线程并发篇

线程基础 创建线程有几种方式 继承Thread类 可以创建一个继承自Thread类的子类&#xff0c;并重写其run()方法来定义线程的行为。然后可以通过创建该子类的实例来启动线程。 示例代码&#xff1a; class MyThread extends Thread {public void run() {// 定义线程的行为} …...

2401d,讨论d串滑动参数

原文 因为对编译时执行的i串的兴趣,我一直在考虑搞个通用用例,而不是相关i串的用例. 滑动模板参数 请考虑以下模板: void pluto(string s)() {pragma(msg, s); } void test() {pluto!"hello"(); }因为s是编译时参数,这编译,而pragma(msg,s) 期望s为编译时值. voi…...

雍鑫建设集团官方网站/中国最大网站排名

题意及分析 给你一个日期&#xff0c;请你设计一个算法来判断它是对应一周中的哪一天 方法一 蔡勒公式 蔡勒公式我想有不少同学都了解过&#xff0c;一般刚学编程时候会介绍这个公式&#xff0c;但应该没有人专门背下来。这里做个记录&#xff1b; 其中&#xff1a; c 是世…...

做生鲜的网站/semseo

西安邮电大学计算机学院本科论文西 安 邮 电 大 学毕 业 设 计(论 文)题 目&#xff1a; JSP用户注册登录系统设计——重设密码模块学 院&#xff1a; 计算机学院专 业&#xff1a; 计算机科学与技术班 级&#xff1a; 计科1101班学生姓名&#xff1a; 廖建军导师姓名&#xff…...

彩票网站建设哪里/seo 推广怎么做

昨天米醋跟大家分享一款聊天界面的设计今天我们继续来制作个人中心页和聊天页两个页面&#xff0c;快来一起学习吧&#xff01;设计个人中心页效果图(1)启动PhotoshopCC 2017&#xff0c;按【CtrlN】组合键新建一个文件&#xff0c;将【文档类型】设置为【画板】&#xff0c;将…...

早那么做商城网站/杭州搜索推广公司

React 和 Vue 有许多相似之处&#xff0c;它们都有&#xff1a; 使用 Virtual DOM提供了响应式 (Reactive) 和组件化 (Composable) 的视图组件。将注意力集中保持在核心库&#xff0c;而将其他功能如路由和全局状态管理交给相关的库。区别&#xff1a; 1、渲染过程 Vue在渲染过…...

网站建设个体营业执照/app营销策略有哪些

使用 nvm 管理不同版本的 node 与 npm https://github.com/nvm-sh/nvm 在我们的日常开发中经常会遇到这种情况&#xff1a;手上有好几个项目&#xff0c;每个项目的需求不同&#xff0c;进而不同项目必须依赖不同版的 NodeJS 运行环境。如果没有一个合适的工具&#xff0c;这…...

无锡网络公司网站建设/职业培训热门行业

一、安装环境 1、本机系统&#xff1a;Windows 10 Pro&#xff08;64位&#xff09; 2、Node.js&#xff1a;node-v10.14.2-x64.msi&#xff08;64位&#xff09; 二、安装Node.js步骤 1、下载对应你系统的Node.js版本:https://nodejs.org/en/download/ 2、选安装目录进行安…...