网络安全实验六 DES对称加密算法详解

简介: 网络安全实验六 DES对称加密算法详解

一、实验目的

通过该实验,详细了解DES加密算法的原理以及实现过程。

二、实验环境

客户机:windows_7 X64  IP地址:随机分配

三、实验内容与实验要求

实验步骤一

我们的任务分为4个部分:

1.了解DES加密算法整体流程。

2.了解DES加密算法细节。

3.使用python简单实现DES算法加密主要过程

任务描述:DES加密算法实现流程解析。

1. DES算法的流程图如下:

通过上面的流程图,相信大家就可以大致了解了DES加密算法的流程。

我们可以转化为文字:一开始输入64位的明文数据;然后进行初始置换(IP);初始置换之后,将生成的64位数据分为左右两部分,每部分为32位,命名为L0、R0;然后这两部分在密钥的控制下,进行16轮完全相同的运算,我们称为16轮迭代运算,每运算一次,左右两部分的命名就改变一次,直到运算完成,L0变为L16,R0变为R16;在16轮运算完成之后,将L16和R16交换,并且合并为64位;再经过末置换(初始置换的逆置换/终止置换),输出密文。

应该注意的是,我们上面说到的16轮完全相同的运算,指的是运算所使用的函数或者说算法是一样的,但是参数L、R以及K是不相同的,L、R不用多说,就是上次运算所得的L和R,但每一轮参与运算的K是我们的入口参数Key,经过某个特定的交换规则交换后,生成16个子秘钥,我们命名为K1,K2,K3….K16。

具体的交换规则以及过程我们会在后面的任务中进行详细解释。

2.函数f

上面我们提到,经过初始置换后,会进行16轮相同的运算,现在我们简单介绍一下这个运算函数中,都进行了哪些运算,运算的主要流程图如下:

从上图我们可以知道,函数f主要对数据的右半部分R进行了操作,

a. 先对其进行扩展置换,使其变为48位的数据,

b. 然后生成的数据再与子密钥进行异或运算,

c. 再以异或运算后的48位数据进行S盒代替,将48位的数据,转换为32位的数据,

d. 再进行P盒置换,生成32位的数据

e. 最后将P盒置换生成的数据与本轮运算的L进行异或,生成新的R。

f. 而新的L是直接由本轮的R进行替换

实验步骤二

任务描述:DES加密过程详解。

1.IP置换(初始置换)

初始置换的原理其实很简单,根据一个初始置换表,对照表中的数值,将明文数据相应位置的数据移动到该数据所在的位置即可,初始置换表如下:

从上表我们可以总结出,初始置换表的规律其实就是(其实不用太在意这个规律):

a. 偶数与奇数分开(1~64),然后分为上下两部分,分布在置换表中,偶数在上,奇数在下。

b. 在偶数与奇数内部,又遵从“从右到左,从上到下,从小到大”的排列。

为了更直观的展示初始置换,我们不使用实际加密中的二进制数据,我们假设现在要加密的这些就是二进制数据,如下:

我们这样理解,a就是加密的64位数据中的第一位,b就是第二位,依次类推,那么,初始置换的过程就应该是这样的:

先置换a:

然后置换b:

直到置换完:

至此我们便得到了初始置换之后的数据

Data=“5XPHzrjb7ZRJBtld91TLDvnf=3VNFxph4WOGyqia6YQI(i)Askc80SKCume+2UMEwog”

     L0 = “5XPHzrjb7ZRJBtld91TLDvnf=3VNFxph”

     R0 = “4WOGyqia6YQI(i)Askc80SKCume+2UMEwog”

2.函数f

初始置换之后,就是我们的16轮运算,我们需要知道的是运算函数f, 在运算过程中数据与密钥结合。f函数作用于每轮的K(子密钥)值和每轮的待加密文本的右半部分(R)。//我们后面出现的K0、R0等等,字母后面有数字的,都是代表对应轮数运算中的K、R等。

从我们实验任务一中的函数f流程图,我们可以清晰的了解到,经过一轮运算之后,左半部分变为原来的右半部分,可理解为:L1=R0,新的右半部分(R)是原来的左半部分与经过f函数处理的原右半部分进行异或运算后得到的(R1=L0^f(R0,K1))。

实验步骤三

任务描述:使用python实现DES加密算法主要过程。

正如我们任务描述中所说的,我们只是用python实现以下简单的加密步骤,我们在此次试验中不考虑的情况有这些:

a. 需要加密的文本超过64位或者不足64位怎么办?

b. 加密后的文本如何显示(这涉及到编码问题)

c. 用户输入的秘钥超出8位长度或者不足8位长度怎么办?

d. 得到一串密文应该如何解密(这也涉及到编码的问题)

也就是我们这次的实验任务,是利用python,将加密的细节展示出来,并与实验环境中的cap4加密的结果进行比对,验证我们的算法是否正确:

1.我们首先要把加密过程中需要用到的置换表都准备好:

2.我们知道,无论是要加密的文本,还是密钥,在加密的过程中都是以二进制的形式被处理的,所以我们需要一个函数来对所有输入的字符串进行处理,将其转换为二进制,我们直接使用ord函数将输入的数据转换为其对应的unicode编码的十进制,在转换为二进制,因为python的bin函数转换成的二进制会自动删除高位的0,所以我们使用“{:08b}.format()”这样的方式来使生成的二进制保持一定的位数:

3.我们先将子密钥的生成搞出来,如下图,我们创建子秘钥生成的函数,所需参数为初始密钥的二进制文本,根据前面的原理知识,进行压缩置换之后,分为C、D两部分,然后进行移位,一口气完成16次的移位之后,将生成的子密钥全部保存在全局列表KS中,方便之后的加密函数调用这些子密钥:

4.加密函数,就不在这里细说了,看代码中的注释就可以理解了呢。

5.我们进行测试:

6.使用环境中的CAP4进行加密,比较生成的二进制:

四、实验过程与分析

进行测试:

使用环境中的CAP4进行加密,比较生成的二进制:

五、实验结果总结

对实验结果进行分析,完成思考题目,总结实验的心得体会,并提出实验的改进意见。

通过实验我们学习到DES是一种使用密钥加密的块算法,就是一个把64位的明文输入块变为64位密文输出块的算法,它所使用的密钥也是64位(其实只使用到了56位,其余8位位奇偶校验位),其算法特点:分组比较短、密钥太短、密码生命周期短、运算速度较慢。

并通过该实验,详细了解DES加密算法的原理以及实现过程,即一开始输入64位的明文数据;然后进行初始置换(IP);初始置换之后,将生成的64位数据分为左右两部分,每部分为32位,命名为L0、R0;然后这两部分在密钥的控制下,进行16轮完全相同的运算,我们称为16轮迭代运算,每运算一次,左右两部分的命名就改变一次,直到运算完成,L0变为L16,R0变为R16;在16轮运算完成之后,将L16和R16交换,并且合并为64位;再经过末置换(初始置换的逆置换/终止置换),输出密文。

目录
相关文章
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
322 0
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
796 0
|
存储 机器学习/深度学习 监控
网络管理监控软件的 C# 区间树性能阈值查询算法
针对网络管理监控软件的高效区间查询需求,本文提出基于区间树的优化方案。传统线性遍历效率低,10万条数据查询超800ms,难以满足实时性要求。区间树以平衡二叉搜索树结构,结合节点最大值剪枝策略,将查询复杂度从O(N)降至O(logN+K),显著提升性能。通过C#实现,支持按指标类型分组建树、增量插入与多维度联合查询,在10万记录下查询耗时仅约2.8ms,内存占用降低35%。测试表明,该方案有效解决高负载场景下的响应延迟问题,助力管理员快速定位异常设备,提升运维效率与系统稳定性。
495 4
|
机器学习/深度学习 算法
采用蚁群算法对BP神经网络进行优化
使用蚁群算法来优化BP神经网络的权重和偏置,克服传统BP算法容易陷入局部极小值、收敛速度慢、对初始权重敏感等问题。
641 5
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
737 2
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
331 8
|
算法 数据挖掘 区块链
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
355 2
|
机器学习/深度学习 数据采集 资源调度
基于长短期记忆网络定向改进预测的动态多目标进化算法(LSTM-DIP-DMOEA)求解CEC2018(DF1-DF14)研究(Matlab代码实现)
基于长短期记忆网络定向改进预测的动态多目标进化算法(LSTM-DIP-DMOEA)求解CEC2018(DF1-DF14)研究(Matlab代码实现)
519 0
|
12月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
468 0
|
机器学习/深度学习 编解码 并行计算
【创新未发表!】基于BKA算法优化-BP、HO算法优化-BP、CP算法优化-BP、GOOSE算法优化-BP、NRBO算法优化-BP神经网络回归预测比较研究(Matlab代码)
【创新未发表!】基于BKA算法优化-BP、HO算法优化-BP、CP算法优化-BP、GOOSE算法优化-BP、NRBO算法优化-BP神经网络回归预测比较研究(Matlab代码)
599 0

热门文章

最新文章