DES算法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DES算法实验报告
导读:就爱阅读网友为您分享以下“DES算法实验报告”的资讯,希望对您有所帮助,感谢您对的支持!
实验报告
姓名:xxxx 学号:0XXXXX 班级:XXXXXXX 日期:2013/11/*
题目:DES算法实验
一、实验环境
1.硬件配置:
处理器:Inter(R) Core(TM) i5-2430M CPU @ 2.40GHz (4
CPUs) ,~2.4GHz 内存:2048MB RAM 2.使用软件:
(1) 操作系统:win7 旗舰版
(2) 软件工具:
Microsoft Visual c++ 6.0
二、实验涉及的相关概念或基本原理
DES是一个分组密码算法,使用64位密钥(除去8位奇偶校验,实际密钥长度为56位)对64比特的数据分组(二进制数据)加密,产生64位密文数据。DES是一个对称密码体制,加密和解密使用同意密钥,解密和加密使用同一算法(这样,在硬件与软件设计时有利于加密单元的重用)。DES 的所有的保密性均依赖于密钥。
DES的加密过程可分为加密处理,加密变换和子密钥生成几个部分组成。 1.加密处理过程(1)初始置换IP。加密处理首先要对64位的明文按表1所示的初始换位表IP进行变换。表中的数值表示输入位被置换后的新位置。
(2)加密处理。上述换位处理的输出,中间要经过16轮加密变换。初始置换的64位的输出作为下一次的输入,将64位分为左、右两个32位,分别记为L0和R0,从L0、R0到L16、R16,共进行16轮加密变换。其中,经过i轮处理后的点左右32位分别为Li和Ri则可做如下定义:
Li=Ri-1
Ri=Li-1 ⊕F(Ri-1,K) 其中,F为F变换
(3)最后换位。进行16轮的加密变换之后,将L16和R16合成64位的数据,再按照表2所示的最后换位表进行IP-1的换位,得到64位的密文,这就是DES算法加密的结果。
2.加密变换过程
64位的密钥先由置换选择1减少至56六位,进行循环左移,然后通过置换选择2减少至48位。而通过扩展运算将32位按表3扩展换位表扩展为48位的右半部分通过异或操作和48位的密钥结合,并分成6位的8个分组,通过8个S-盒
将这48位替代成新的32位数据。
按此进行,输出32位,再按照表4 换位表P进行变换,这样就完成了F(R,K)的变换。
3.子密钥生成过程
密钥通常表示为64位的自然数,首先通过压缩换位Key_Exchange去掉每个字节的第8位,用作奇偶校验。因此,密钥去掉第8、16、24……64位减至56位,所以实际密钥长度为56位。而每轮要生成48位的子密钥。输入的64位密钥,首先通过压缩换位得到56位的密钥,每层分成两部分,一部分28位为C0,一部分为D0。C0和D0依次进行循环左移操作生成了C1和D1,将C1和D1合成56位,再通过压缩换位Compression输出48位的子密钥K1,再将C1和D1进行循环左移和Compression压缩换位,得到子密钥K2……以此类推,得到16个子密钥。密钥压缩换位表如表5表6所示。
在产生子密钥的过程中左移次数如表7所示。
4.解密处理过程
从密文到明文的解密过程可采用与加密完全相同的算法。不过解密要用加密的逆变换,就是把上面的最后换位表和初始换位表完全倒过来变换。三、实验内容流程图:
主要代码:
①初始置换
unsigned char Initial [] =
{
58, 50, 42, 34, 26, 18, 10, 2,60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6,64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1,59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5,63, 55, 47, 39, 31, 23, 15, 7 };
②逆初始置换
unsigned char Final[] =
{
40, 8, 48, 16, 56, 24, 64, 32,39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30,37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28,35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26,33, 1, 41, 9, 49, 17, 57, 25 };
③扩展变换E
unsigned char Expansion[] =
{
32, 1, 2, 3, 4, 5,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
};
④P_盒置换
unsigned char P_Box[]=
{
16, 7, 20, 21, 29, 12, 28, 17,1, 15, 23, 26, 5, 18, 31, 30,2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25
};
⑤S盒置换