当前位置:文档之家› 密码学实验报告模板总结模板计划模板.doc

密码学实验报告模板总结模板计划模板.doc

密码学应用与实践课程实验报告
实验 1:实现 DES密码体制
一、实验目的
1.编写程序实现 DES的加、解
密:1)编程构造 DES的密钥;
2)应用上述获得的密钥将一段英文或文件进行加、解密。

2.用 DES算法实现口令的安全
二、实验内容
1.DES原理
DES综合运用了置换,代换,移位多种密码技术,是一种乘积密码。

在算法结构上采用迭代
结构,从而使其结构清晰,调理清楚,算法为对合运算,便于实现,运行速度快。

DES使用了初始置换IP 和 IP-1 各一次(相应的置换看算法描述图表)置换P16 次,安排使用这 3 个置换的目的是把数据彻底打乱重排。

选择置换 E 一方面把数据打乱重排,另一方面把32 位输入扩展为48 位,算法中除了S- 盒是非线性变换外,其余变换均为显示变换,所以保密
的关键是选择S- 盒。

符合以下 3 条准则:
(1)对任何一个 S- 盒而言,没有任何线性方程式等价于此S-盒的输出输入关系,即是S- 盒是非线性函数。

(2)改变 s- 盒的任何一位输入,都会导致两位以上的输出改变,即满足" 雪崩效应 " 。

(3)当固定某一个位的输入时,S- 盒的 4 个出位之间,其中0 和 1 的个数之差小。

这个准
则的本质是数据压缩,把四位输入压缩为 4 位输出。

选择 S-盒函数的输入中任意改变数位,
其输出至少变化两位。

因为算法中使用了16 次迭代,大大提高了保密性。

2.DES算法由加密、解密和子密钥的生成三部分组成
1)加密
DES算法处理的数据对象是一组64 比特的明文串。

设该明文串为m=m1m2m64 (mi=0 或 1) 。

明文串经过64 比特的密钥K 来加密,最后生成长度为64 比特的密文E。

其加密过程图示如下:
2)子密钥的生成
64 比特的密钥生成16 个 48 比特的子密钥。

其生成过程见图:
3)解密
DES的解密过程和DES的加密过程完全类似,只不过将 16 圈的子密钥序列 K1,K2 K16 的顺序倒过来。

即第一圈用第 16 个子密钥 K16,第二圈用 K15,其余类推。

第一圈:
加密后的结果
L=R15, R=L15 ⊕f(R15,K16)⊕ f(R15,K16)=L15
同理 R15=L14⊕f(R14,K15), L15=R14。

同理类推:得L=R0, R=L0 。

3.密钥生成
(1)取得密钥
从用户处取得一个64 位 ( 本文如未特指,均指二进制位)) 长的密码key ,
去除 64 位密码中作为奇偶校验位的第 8、 16、 24、 32、 40、 48、 56、 64 位 , 剩下的 56 位作为有效输入密钥 .
(2)等分密钥
(3)密钥移位
DES算法的密钥是经
过16 次迭代得到一组密钥的, 把在 1.1.2 步中生成的 A,B 视为迭代
的起始密钥 . 比如在第 1 次迭代时密钥循环左移 1 位, 第 3 次迭代时密钥循环左移 2 位 . 第9 次迭代时密钥循环左移 1 位 , 第 14 次迭代时密钥循环左移 2 位 .
第一次迭代 :
A(1) = ?(1) A
B(1) = ?(1) B
第 i 次迭代 :
A(i) = ?(i) A(i-1)
B(i) = ?(i) B(i-1)
(4)密钥的选取
在( 3)步中第i 次迭代生成的两个28 位长的密钥为
把合并
按照表 4 所示 k 的第一位为56 位密钥的第14 位,k 的第 2 位为 56 位密钥的第17 位,...
,依此类推, k 的最后一位最后一位是56 位密钥的第32 位。

生成与进行第i 次迭代加密的数
据进行按位异或的48 位使用密钥 :
(5)迭代
DES算法密钥生成需要进行16 次迭代 , 在完成 16 次迭代前 , 循环执行( 3)( 4)步 . 最终
形成 16 套加密密钥 :key[0] , key[1] , key[2] , . key[14] , key[15] .
4.数据的加密操作
(1)取得数据
把明文数据分成 64 位的数据块,不够 64 位的数据块以适当的方式补足。

(2)数据扩展
第一次迭代以上步生成的newData 作为输入数据 , 第 i (i > 1) 次迭代以第 i-1 次的 64 位输出数据为输入数据, 把 64 位数据按位置等分成左右两部分:
保持 left不变,
把扩展后的48 位 right与第i次迭代生成的48 位加密密钥进行按位异或操作
形成一个新的48 位的 right.
(3)数据压缩
在1.2.3 步中形成了 48 位的 right 值 ,
需要把 48 位的 right值转换成32位的right值.把right视为由8个6位二进制块组成,
a,b .h 都是 6 位 , 强制转换成10 进制整数的值都不大于后, 在对应的表中根据转换后整数值取得对应位置的替代值, 完成了从48 位向 32 位数据的转换.
64 ,a,b h转成 10 进制整数每 6 位用一个 4 位替换这样就
有些资料中介绍 6 位转 4 位的实现方法与本文所采用的不同
相同的。

, 但殊途同归, 最终的结果是
(4)数据换位
把1.2.4 步形成的 32 位 right
根据表 8 进行转换 : 数据的原第 16 位换到第一位 , 原第 7 位换到第二位, ... ,依此类推 , 最后得到新的 32 位数据 .
(5)
把交换数据
right和left 按位异或后的值赋给right, 然后将本轮输入的原始right 值赋给
left.
(6)迭代
DES算法需要进行16 次迭代 , 在完成 16 次迭代前 , 把第 i-1次得到的的left 的值作为第i 次的输入数据, 重复 1.2.3~ 的步骤 , 但是有一点要记住: 在步骤 1.2.3 迭代要选择第i 次迭代生成的密钥与数据进行按位异或。

(7)数据整理
为保证加密和解密的对称性,DES 算法的前15 次迭代每完成一次迭代都要交换right 的值 , 第 16 次迭代不交换两者的数值.到此把32位的left和right合并成Data ,和 right 中第 i 次
left和64 位的
数据的原第40 位换到第一位 , 原第 8 位换到第二位,...,依此类推,最后的得到新的64位 .
Data 即为密文 .
5.数据的解密
数据解密的算法与加密算法相同, 区别在于 1.2.3步中和数据进行按位异或的密钥的使用顺
序不同 , 在加密中是按照第 i 次迭代就采用第 i 次迭代生成的密钥进行异或 , 而解密时第 i 次迭代就采用第 17-i 次迭代生成的密钥和数据进行异或。

相关主题