DES分组加密实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DES分组密码实验报告
一、DES算法的实现
1.DES简介
DES算法工作:如Mode为加密,则用Key 去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。
2. DES算法详述
(1)DES加密标准
DES是对二元数字分组加密的分组密码算法,分组长度为64比特。每64位明文加密成64位密文,没有数据压缩和扩展,密钥长度为56比特,若输入64比特,则第8,16,24,32,40,48,56,64为奇偶校验位,所以,实际密钥只有56位。DES算法完全公开,其保密性完全依赖密钥。
DES的加密过程可表示为:
DES(m)= IP-1T16·T15…T2·T1·IP(m).
右图面是完全16轮DES算法框图:
图1 完全16轮DES算法
1 初始置换IP
初始置换是将输入的64位明文分为8个数组,每一组包括8位,按1至64编号。
IP的置换规则如下表:
2 IP-1是IP的逆置换
由于第1位经过初始置换后,已处于第40位。逆置换就是再将第40位换回到第1位。
逆置换规则如下表所示:
初始置换IP及其逆置换IP-1并没有密码学意义,因为置换前后的一一对应关系是已知的。它们的作用在于打乱原来输入明文的ASCⅡ码字划分的关系,并将原来明文的第m8,m16,m24,m32,m40,m48,m56,m64位(校验位)变成IP的输出的一个字节。
3. DES算法的迭代过程
图中Li-1和Ri-1分别是第i-1次迭代结果的左右两部分,各32比特。即Li=Ri-1, Ri=Li-1 f(Ri-1,ki)。其中轮密钥Ki为48比特,函数F(R,K)的计算过程如图所示。轮输入的右半部分R为32比特,R首先被扩展成48比特,扩展过程由表3定义,其中将R的16个比特各重复一次。扩展后的48比特再与子密钥Ki异或,然后再通过一个S盒,产生32比特的输出。该输出再经过一个由表4定义的置换,产生的结果即为函数F(R,K)的输出。
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1
表3 扩展E
ki是由64比特的初始密钥(亦称种子密钥)导出的第i轮子密钥,ki是48比特
DES算法的关键是f(Ri-1,ki)的功能,其中的重点又在S-盒(Substitution Boxes)上。F函数的输出是32比特。
图3 F函数计算过程图
将R经过一个扩展运算E变为48位,记为E(R)。计算E(R) K=B,对B施行代换S,此代换由8个代换盒组成,即S-盒。每个S-盒有6个输入,4个输出,将B依次分为8组,每组6位,记B= B1B2B3B4B5B6B7B8其中Bj作为第j个S-盒的输入,其输出为Cj,C= C1C2C3C4C5C6C7C8就是代换S的输出,所以代换S是一个48位输入,32位输出的选择压缩运算,将结果C再实行一个置换P(表4),即得F(R,K)。
其中,扩展运算E与置换P主要作用是增加算法的扩散效果。S-盒是DES算法中唯一的非线性部件,当然也就是整个算法的安全性所在。它的设计原则与过程一直因为种种不为人知的因素所限,而未被公布出来。
S-盒如下表:
S-盒的置换规则为:
取{0,1,…,15}上的4个置换,即它的4个排列排成4行,得一4*16矩阵。若给定该S盒的6个输入为b0 b1 b2 b3 b4 b5,在Si表中找出b0 b5行,b1b2b3b4列的元素,以
4位二进制表示该元素,此为S-盒Si的输出。
例1 S2的输入为101011,
b1 =1,b6=1,b1 b6=(11)2=3
(b2 b3 b4 b5)2=(0101)2=5
查S2表可知第3行第5列的输出是15,15的二进制表示为1111。
则S2的输出为1111。8个S-盒的代换方式都是一样的。
S盒输出的32比特经P置换,P置换的功能是将32位的输入,按以下顺序置换,然后输入仍为32比特。P置换的顺序如表5:
4 子密钥的生成
图4 DES子密钥生成流程图
图4给出了子密钥产生的流程图。首先对初始密钥经过置换PC-1(表2.6[7]),将初始密钥的8个奇偶校验位剔除掉,而留下真正的56比特初始密钥。
然后将此56位分为C0,D0两部分,各28比特,C0,D0如下:
C0=k57k49……k44k36
D0=k63k55……k12k4
然后分别进行一个循环左移函数LS1,得到C1,D1,将C1(28位),D1(28位)连成56比特数据,再经过密钥置换PC-2(表7)做重排动作,从而便得到了密钥K1(48位)。依次类推,便可得到K2,K3 (16)
其中LS1(1≤i≤16)表示一个或两个位置的循环左移,当i=1,2,9,16时,移一个位置,当i=3,4,5,6,7,8,10,11,12,13,14,15时,移两个位置。
(2)DES算法的解密过程
DES算法的解密过程跟加密过程是一样的,区别仅仅在于第一次迭代时用密钥k16,第二次k15、……,最后一次用k1,算法本身没有任何变化。
二、源代码
#include "memory.h"
#include "stdio.h"
enum {encrypt,decrypt};//ENCRYPT:加密,DECRYPT:解密
void des_run(char out[8],char in[8],bool type=encrypt);