DES算法详细设计

来源:互联网 发布:qq三国陆逊打技能数据 编辑:程序博客网 时间:2024/06/18 16:52

一、DES算法原理概述

DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。 明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。DES是一种分组密码,是两种基本的加密组块替代和换位的细致而复杂的组合,它通过反复依次应用这两项技术来提高其强度,共经过16轮的替代和换位。使得密码分析者无法获得该算法一般特性以外更多的信息。
DES算法的实现大致可以分为以下几个步骤:初始置换—密钥生成—16轮迭代变换—IP逆置换—密文。
以下是一个DES的简单流程图:
这里写图片描述

二、分模块详细设计每一个模块

1、将明文与密文用二进制表示

2、初始置换

对输入的64位二进制明文按照2.1所示的置换表进行置换,打乱明文的顺序:
这里写图片描述
表2.1
将置换后的明文按顺序分为左右两组L0和R0,每一组都是32位的。IP初始置换的算 法设计如下图2.2所示:
这里写图片描述
图2.2

3、密钥生成(密钥置换)

(1)56位密钥的生成过程:将初始的64位密钥从1到64位进行编号,形成一个矩阵, 如下表3.1所示,每一行的第八位将作为奇偶校验位被忽略,于是形成了初始的56位 的密钥输入:
这里写图片描述
表3.1

(2)接下来使用选择置换表(如下表3.2所示),进行置换操作
这里写图片描述
表3.2
密钥置换的算法如下图3.3所示:
这里写图片描述
图3.3
这个置换操作就是将第57位放到第1位,第49位放到第2位,将第4位放到最后一位,由于这里除去了奇偶校验位,所以不会包含6,16,24,32,40,48,56,64这八个数。

(3)将第(2)步得到的输出按顺序分为左右两个部分,每个部分有28位,分别用L0和R0来表示,根据轮迭代的轮数,在第1,2,9,16轮时分别将L0和R0循环左移一位,其余轮数时循环左移两位,得到56位的输出。
这里写图片描述
移位算法如下图3.4所示:
这里写图片描述
图3.4

(4)再将第(3)得到的输出按照标3.5所示的置换表,进行密钥压缩置换,得到的就是在T迭代里面输入的密钥Ki:
这里写图片描述
表3.5
置换算法如下图3.6所示:
这里写图片描述
图3.6

4、轮迭代

(1)总体过程:首先关于轮迭代的过程如下图4.1所示,Li-1和Ri-1是上一轮的迭代的输出,上一轮的左边的输出与经过轮函数之后的输出结果进行异或运算得到当前轮的右边输出,左边的结果是上一轮的右边的输出:

这里写图片描述
图4.1

(2)轮函数详细讨论
E扩展:首先将原来的明文数据的右半部分R从32位扩展成为48位,扩展置换表如4.2所示:
这里写图片描述
表4.2
上图中空白部分表示原来的32位,然后两边阴影部分的数据是扩展加上去的 数据,将第32位放置到第一位,将第5位数据放置到第6位的位置,由此就将32 位的数据扩展成为了48位的数据。

E扩展算法如下图4.3所示:
这里写图片描述
图4.3
异或:将E扩展得到的48位的数据与密钥输入Ki进行异或运算,得到的48位的 输出数据作为”S盒”的输入。
异或操作算法如下图4.4所示:
这里写图片描述
图4.4
“S盒替换”:将48位数据按照每6位分为一组,一共分为8组,并分别输入S1, S2,S3,S4,S5,S6,S7,S8这8个盒子中,每个盒子产生4位的输出,将每个S 盒的输出拼接成32位。
S盒操作算法如下图4.5所示:

这里写图片描述
这里写图片描述
图4.5

P盒置换:将S盒的输出拼接得到32位的数据,对这些数据再一次进行置换,置 换表如下图4.6所示,置换之后的结果就是轮函数的输出结果:
这里写图片描述
图4.6
P盒置换算法如下图4.7所示:
这里写图片描述
图4.7

(3)S盒详细讨论
S盒是一个六进四出的处理盒子,也是DES算法中唯一没有公开技术细节的最 核心的部分。
S盒的使用方法:设S盒的输入为6位的二进制数b1b2b3b4b5b6,把b1b6两位 二进制数转换成十进制数,并作为S盒的行号i,把b2b3b4b5四位二进制数转 换成十进制数,并作为S盒的列号j,则对应S盒的(i, j)元素为S盒的十进制输出, 再将该十进制数转换为二进制数,就得到了S盒的4位二进制数输出。S盒的内容 如下表4.8所示:
S盒1:
这里写图片描述
S盒2:
这里写图片描述
S盒3:
这里写图片描述
S盒4:
这里写图片描述
S盒5:
这里写图片描述
S盒6:
这里写图片描述
S盒7:
这里写图片描述
S盒8:
这里写图片描述
表4.8

(4)将轮函数的输出结果与上一轮得到的输出结果Li-1进行异或运算,得到的就是这 一轮的输出结果Ri。
算法如下图4.9所示:
这里写图片描述
图4.9

按照这样的方法不停的继续下去直到第16轮。在第16轮的时候要将L16和R16互换位 置。

5、逆初始置换

经过16轮的迭代之后,将输出的L16和R16合并起来形成64位的二进制数,最后 按照表5.1进行逆初始置换,就可以得到64位的密文。
这里写图片描述
表5.1
逆初始置换算法实现如下图5.2所示:
这里写图片描述
图5.2
到此DES算法的详细设计的过程就结束了,从设计的过程可以看出它确实是一个相当复杂的过程。

6、DES解密过程

DES的解密过程在原理上是与加密过程一样的,只有极少的地方不一样:
(1)如果加密的时候子密钥的使用顺序是K1,K2……K16,那么解密的时候子密钥 的使用顺序是K16,K15……K1;
(2)输入是64位密文,输出是64位明文;
(3)在生成密钥的时候加密算法是向左循环移动,但是解密算法是向右循环移动。

三、数据结构

在设计的过程中为了方便使用将所有的数据类型都使用整数类型来表示,使用整数类型方便操作而且还不容易出错,只是在设计数组边界的地方需要小心一点,不然很容易出错。

四、小结

关于DES算法的设计首先要将大问题模块化,先实现每一个小的模块,然后再将小模块组合成为一个大模块,跟着老师上课所讲的思路走,按着那个思路来实现的话逻辑比较清晰也不容易出错。

原创粉丝点击