1、DES 算法实验报告姓名: 学 号: 班级: 一、实验环境 1硬件配置:处理器(英特尔 Pentium 双核 E5400 2.70GHZ 内存:2G)2使用软件: 操作系统:Windows XP 专业版 32 位 SP3(DirectX 9.0C)软件工具:Microsoft Visual C+ 6.0二、实验涉及的相关概念或基本原理 1、加密原理DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接
2、着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。三、实验内容1、关键代码子密钥产生F 函数以及加密 16 轮迭代2、DES 加密算法的描述及流程图子密钥产生在 DES 算法中,每一轮迭代都要使用一个子密钥,子密钥是从用户输入的初始密钥产生的。K 是长度为 64 位的比特串,其中 56 位是密钥,8 位是奇偶校验位,分布在8,16,24,32,40,48,56,64 比特位上,可在 8 位中检查单个错误。在密钥编排计算中只用 56 位,不包括这 8 位。子密钥生成大致分为:置换选择 1(PC-1) 、循环左移、置换选
3、择 2(PC-2)等变换,分别产生 16 个子密钥。DES 解密算法与加密算法是相同的,只是子密钥的使用次序相反。DES 加密算法DES 密码算法采用 Feistel 密码的 S-P 网络结构,其特点是:加密和解密使用同一算法、同一密钥、同一结构。区别是:16 轮加密子密钥顺序为 K1,K2,K16,解密子密钥顺序为 K16,K15,K1。其中密钥长度为 64 位,在具体算法中,只使用 56 位(另外 8 位为奇偶校验位)的密钥输入对 64 位的明文进行加解密运算,获取 64 位密文。整个过程由三个阶段来完成:初始置换、乘积变换和逆初始置换。大致过程:设m=m1m2m64 为 64 位输入明文
4、,DES 算法先执行初始置换 IP 对 m 的 64 位进行换位处理;然后通过子密钥 K1K16 对明文进行 16 轮乘积变换,即进行 16 次迭代处理;最后经过逆初始置换 的处理,得到 64 位密文 c=c1c2c64 输出。16 轮迭代目的是使明文增加混乱1性和扩散性,避免输出密文残留统计规律,使破译者无法反向推算出密钥。第一步:变换明文。对给定的 64 位的明文 x.,首先通过一个置换 IP 表来重新排列 x.,从而构造出 64 位的 x0, x0=IP(x)=L0R0,其中 L0 表示 x0 的前 32 位,R0 表示 x0 的后 32 位。第二步:按照规则迭代。规则为:Li=Ri-1
5、;Ri=Lif(Ri-1, Ki) (i=1,2,3,16)经过第 1 步变换已经得到 L0 和 R0 的值,其中符号表示数学运算“异或” ,f 表示一种置换,由 s 盒置换构成,Ki 是一些由密钥编排函数产生的比特块。第三步:对 L16R16 利用 IP-1 作逆置换。 流程图图 1DES 算法一轮迭代的过程DES 加密算法的描述3、实验结果加密结果 解密结果图 2 DES 加解密结果四、实验总结分析通过这次实验,我发现 DES 算法虽然并不复杂,但是真正实现起来,自己编程上还存在诸多不足,很多细微的知识点很容易就遗忘了,比如对与数组的应用也不是很扎实,数组下标和替换表之间存在 1 个位的偏差,如若没有理清逻辑关系,很容易出错,导致返工。通过这次 DES 加解密算法的实验,我对 DES 的原理有了更深刻的认识,对初始变换,F 函数的扩展变换,S 盒,P 盒的混乱扩散效应有了更深的体会,经历了代码的编写后,我对DES 的 16 轮迭代的具体步骤,以及子密钥的产生更清晰明了,果然通过理论联系实际,才可以把零碎的知识点巩固加深。