openssl + 3DES开发实例(linux)
文章目录
- 一、3DES介绍
- 3DES 的特点:
- 3DES 加密的步骤:
- 3DES 的应用场景:
- 二、3DES原理
- 1. DES 原理回顾:
- 2. 3DES 原理:
- 3. 3DES 的加密流程:
- 三、openssl + 3DES开发实例
一、3DES介绍
3DES(Triple DES)是对称密钥加密算法,也被称为DESede(DES加强版)。它是对DES(Data Encryption Standard)的一种改进和加强,旨在提高 DES 的安全性。
3DES 的特点:
-
密钥长度: 3DES 使用三个 56 位的密钥,总共 168 位。这是 DES 的三倍密钥长度。实际上,密钥长度可以分别设置,如使用两个相同的密钥也是一种形式的3DES。
-
运算模式: 3DES 可以采用不同的运算模式,如 ECB(Electronic Codebook)、CBC(Cipher Block Chaining)等,以满足不同的需求。
-
加密过程: 3DES 的加密过程可以简单描述为 E(K1, D(E(K2, E(K3, plaintext)))),其中 K1、K2、K3 是三个密钥,E 表示加密,D 表示解密。这样的嵌套结构提高了加密的安全性。
3DES 加密的步骤:
-
初始置换(Initial Permutation): 明文经过初始置换,位被重新排列。
-
分组和迭代: 明文被分成块,然后经过一系列的迭代。每个迭代都包括替代、置换和异或等运算。
-
密钥扩展: 初始密钥被扩展成三个子密钥。
-
加密/解密: 使用三个子密钥对明文进行加密,或者使用三个子密钥对密文进行解密。
-
最终置换(Final Permutation): 最后,通过最终置换将得到的密文重新排列,形成最终结果。
3DES 的应用场景:
-
数据传输安全: 3DES 可以用于保护敏感数据在网络上的传输,确保数据的机密性。
-
金融领域: 在金融领域,特别是在支付系统中,3DES 被广泛应用以确保交易的安全性。
-
加密通信: 3DES 可以用于保护通信渠道中的敏感信息,如虚拟私人网络(VPN)等。
尽管3DES提供了一定程度的安全性,但由于其计算量大、效率低,而且密钥长度相对较短,因此在现代应用中,更常见的是使用更先进的对称加密算法,例如 AES(Advanced Encryption Standard)。
二、3DES原理
Triple DES(3DES)是对称密钥加密算法,它基于 DES 加密算法的一种改进。下面是 3DES 的基本原理:
1. DES 原理回顾:
-
DES 使用一个 64 位的明文块和一个 56 位的密钥。首先,明文经过初始置换(Initial Permutation),然后被分成左半部分(L0)和右半部分(R0)。
-
DES 使用 Feistel 置换结构,在每一轮中,右半部分经过一系列的替代、置换和异或运算,然后与左半部分进行异或。这产生新的右半部分和新的左半部分。
-
迭代过程重复16轮,最后通过最终置换(Final Permutation)将左右两部分重新排列,形成加密结果。
2. 3DES 原理:
-
3DES 使用三个 56 位的密钥,通常称为 K1、K2、K3。它可以采用不同的模式,其中最常见的是 EDE 模式(Encrypt-Decrypt-Encrypt)。
-
在 EDE 模式中,明文经过第一次加密(E1),然后解密(D2),最后再加密(E3)。这个过程可以简单表示为:Ciphertext = E3(D2(E1(Plaintext)))。
-
3DES 的迭代过程类似于 DES,但是有更多的密钥和更复杂的操作。
-
在 EDE 模式下,如果 K1、K2、K3 是相同的,那么它等同于 DES。如果 K1、K2 不同,但 K3 = K1,那么它提供了两次 DES 加密的安全性。如果 K1、K2、K3 都不同,那么它提供了更高的安全性。
3. 3DES 的加密流程:
-
初始置换: 明文经过初始置换,位被重新排列。
-
分组和迭代: 明文被分成块,然后经过一系列的迭代。每个迭代包括替代、置换和异或等运算。
-
密钥扩展: 初始密钥被扩展成三个子密钥。
-
加密/解密: 使用三个子密钥对明文进行加密,或者使用三个子密钥对密文进行解密。
-
最终置换: 通过最终置换将得到的密文重新排列,形成最终结果。
3DES 的安全性主要来自密钥的长度和迭代的次数,使得密码分析者需要耗费更多的计算资源来破解密码。尽管 3DES 提供了一定程度的安全性,但由于计算量大和效率低,现代应用更倾向于使用先进的加密算法,如 AES。
三、openssl + 3DES开发实例
使用 OpenSSL 进行 3DES(Triple DES,也称为 DESede)加密和解密的实例与 DES 类似,只是需要设置更长的密钥。以下是一个简单的 C++ 示例代码,假设你已经安装了 OpenSSL 库:
#include <iostream>
#include <openssl/des.h>void des3_encrypt(const unsigned char *input, unsigned char *output, const DES_key_schedule &ks1, const DES_key_schedule &ks2, const DES_key_schedule &ks3) {DES_ecb3_encrypt(input, output, &ks1, &ks2, &ks3, DES_ENCRYPT);
}void des3_decrypt(const unsigned char *input, unsigned char *output, const DES_key_schedule &ks1, const DES_key_schedule &ks2, const DES_key_schedule &ks3) {DES_ecb3_encrypt(input, output, &ks1, &ks2, &ks3, DES_DECRYPT);
}int main() {// 设置密钥const char *key_str = "0123456789abcdef0123456789abcdef0123456789abcdef";DES_cblock key1, key2, key3;DES_key_schedule ks1, ks2, ks3;memcpy(key1, key_str, 8);memcpy(key2, key_str + 8, 8);memcpy(key3, key_str + 16, 8);DES_set_key_unchecked(&key1, &ks1);DES_set_key_unchecked(&key2, &ks2);DES_set_key_unchecked(&key3, &ks3);// 待加密的数据const unsigned char plaintext[8] = "12345678";unsigned char ciphertext[8];unsigned char decryptedtext[8];// 加密des3_encrypt(plaintext, ciphertext, ks1, ks2, ks3);std::cout << "Ciphertext: ";for (int i = 0; i < 8; ++i) {std::cout << std::hex << (int)ciphertext[i];}std::cout << std::endl;// 解密des3_decrypt(ciphertext, decryptedtext, ks1, ks2, ks3);std::cout << "Decrypted text: " << decryptedtext << std::endl;return 0;
}
这个例子中,我们使用了 24 字节的密钥,分为三个 8 字节的子密钥。密钥的设置和使用方式与 DES 类似。编译时需要链接 OpenSSL 库,命令类似于之前的例子。
请注意,与 DES 相比,3DES 提供了更高的安全性,但由于其复杂性和较慢的运算速度,现代应用中更常使用 AES 等算法。
相关文章:
openssl + 3DES开发实例(linux)
文章目录 一、3DES介绍3DES 的特点:3DES 加密的步骤:3DES 的应用场景: 二、3DES原理1. DES 原理回顾:2. 3DES 原理:3. 3DES 的加密流程: 三、openssl 3DES开发实例 一、3DES介绍 3DES(Triple …...
遵循开源软件安全路线图
毫无疑问,开源软件对于满足联邦任务所需的开发和创新至关重要,因此其安全性至关重要。 OSS(运营支持系统) 支持联邦政府内的每个关键基础设施部门。 联邦政府认识到这一点,并正在采取措施优先考虑 OSS 安全ÿ…...
294_C++_
1、全部大致解析: struct alarminfo_t {unsigned int alarmid;INTF_ALARM_INFO_S pAlarm; };typedef enum{INTF_IO_ALARM_E= 0, //I/O探头告警开始INTF_MOTION_ALARM_E, //移动侦测告警开始INTF_AI_ALARM_E,...
【计算机网络笔记】网络地址转换(NAT)
系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…...
【flink理论】动态表:关系查询处理流的思路:连续查询、状态维护;表转换为流需要编码编码
文章目录 一. 使用关系查询处理流的讨论二. 动态表 & 连续查询(Continuous Query)三. 在流上定义表1. 连续查询2. 查询限制2.1. 维护状态2.2. 计算更新 四. 表到流的转换1. Append-only 流2. Retract 流3. Upsert 流 本文主要讨论了: 讨论通过关系查询处理无界流…...
2023年09月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 以下选项中,不是tkinter变量类型的是?( ) A: IntVar() B: StringVar() C: DoubleVar() D: FloatVar() 答案:D tkinter 无 FloatVar()变量类型。 第2题 关于tkinter,以下说…...
Ubuntu16.04上安装Docker
Ubuntu16.04上安装Docker 更新 apt 包索引: sudo apt-get update安装依赖包,以便使用 HTTPS 仓库 sudo apt-get install apt-transport-https ca-certificates curl software-properties-common添加 Docker GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu…...
FSOD论文阅读 - 基于卷积和注意力机制的小样本目标检测
来源:知网 标题:基于卷积和注意力机制的小样本目标检测 作者:郭永红,牛海涛,史超,郭铖 郭永红,牛海涛,史超,郭铖.基于卷积和注意力机制的小样本目标检测 [J/OL].兵工学报. https://…...
Windows系统中搭建docker (ubuntu,Docker-desktop)
一、docker安装前的准备工作 1. 开启CPU虚拟化,新电脑该默认是开启的,如果没开启可以根据自己电脑型号品牌搜索如克开启CPU虚拟化。当开启成功后可在设备管理器中看到。 2.开通Hyper-V 通过 Windows 控制面板 --> 程序和功能 -->启用或关闭…...
使用记录-MongoDB
find常用方法 在 MongoDB 的 find 方法中,可以使用各种查询操作符来执行不同类型的查询。其中之一是 $in 操作符,它用于在一个字段中匹配多个值。 $eq 操作符: 用于匹配字段值等于指定值的文档。 // 查询 age 字段等于 25 的文档 db.colle…...
用归并排序算法merge_sort( )求解 逆序对的数量 降低时间复杂度为 nlogn
题目简述 给定一个序列有n个数,求n个数中逆序对的个数,逆序对的定义:i < j && a[i] > a[j]。 输入格式 第一行包含一个整数n。 第二行包含 n 个整数(所有整数均在1~1e9范围内),表示整数数…...
大功率电源芯片WD5030L
电源管理芯片作为现代电子设备中最关键的元件之一,直接影响着设备的性能和效率。而大功率电源芯片作为电源管理芯片中的一种,其性能和应用领域更加广泛。本文将介绍一款具有宽VIN输入范围、高效率和多种优良性能的大功率电源芯片WD5030L,并探…...
Spring Boot使用EhCache完成一个缓存集群
在上一篇在SpringBoot中使用EhCache缓存,我们完成了在Spring Boot中完成了对EhCaChe的使用,这篇,我们将对EhCache的进一步了解,也就是搭建一个EhCache的缓存集群。 集群 在搭建一个EhCache的时候,我们需要先了解&…...
yolov5模型代码怎么修改
yaml配置文件 深度乘积因子 宽度乘积因子 所有版本只有这两个参数的不同,s m l x逐渐加宽加深 各种类型层参数对照 backbone里的各层,在这里解析,只需要改.yaml里的各层参数就能控制网络结构 修改网络结构 第一步:把新加的模块…...
VIM去掉utf-8 bom头
Windows系统的txt文件在使用utf-8编码保存时会默认在文件开头插入三个不可见的字符(0xEF 0xBB 0xBF)称为BOM头 BOM头文件 0.加上BOM标记: :set bomb 1.查询当前UTF-8编码的文件是否有BOM标记: :set bomb? :set bomb? 2.BOM头:文…...
Go 使用Viper处理Go应用程序的配置
在开发Go应用程序时,处理配置是一个常见的需求。配置可能来自于配置文件、环境变量、命令行参数等等。Viper是一个强大的库,可以帮助我们处理这些配置。 什么是Viper? Viper是一个应用程序配置解决方案,用于Go应用程序。它支持JS…...
hadoop安装网址
Hadoop是什么 1)Hadoop是一个有Apache基金会所开发的分布式系统基础架构。 2)主要解决海量数据的存储和海量数据的分析计算问题。 3)广义上来说,Hadoop通常是指一个更广泛的概念---Hadoop生态圈。 Hadoop发行版本 Hadoop发行的…...
JavaMail邮件发送服务
记录一次使用基于SpringBoot来设置发送邮件的服务 导入依赖 <!--邮件发送--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>${springboot.version}</ve…...
【918.环形子数组的最大和】
目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int maxSubarraySumCircular(vector<int>& nums) {int sum0;for(auto x:nums) sumx;vector<int> f(nums.size());vector<int> g(nums.size…...
Unity Quaternion接口API的常用方法解析_unity基础开发教程
Quaternion接口的常用方法 Quaternion.Euler()Quaternion.Lerp()Quaternion.Inverse()Quaternion.RotateTowards() Quaternion在Unity中是一种非常重要的数据类型,用于表示3D空间中的旋转。Quaternion可以表示任何旋转,无论是在哪个轴上旋转多少度&#…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...
