华科大密码学课程设计实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

密码学课程设计实验报告

专业:信息安全

班级:0903

姓名:付晓帆

学号:U200915328

一、 DES 的编程实现

1.实验目的

通过实际编程掌握DES 的加、脱密及密钥生成过程,加深对DES 算法的认识。

2.实验原理 a.加密过程

DES 是一个分组密码,使用长度为56比特的密钥加密长度为64比特的明文,获得长度为64比特的密文,其加密过程:

(1) 给定一个明文X ,通过一个固定的初始置换IP 置换X 的比特,获得X0,X0=IP(X)=L0R0,L0R0分别是X0的前32比特和后32比特。

(2) 然后进行16轮完全相同的运算,有如下规则,其中0

其中函数f(A,J)的A 是一个长度为32的比特串,第二个变量J 是一个长度为48的比特串,输出的是一个长度为32的比特串,其过程:

a 、将f 的第一个变量A 根据一个固定的扩展函数E 扩展成为一个长度为48

的比特串

b 、计算

,并将所得结果分成8个长度为6的比特串,记为

B=B1B2B3B4B5B6B7B8

c 、使用8个S 盒,每个Si 是一个固定的4X16阶矩阵,它的元素来自0到

15这16个整数。给定一个长度为6的比特串,用首位两个比特作行号,用中间四个比特作为列号,则Sj(Bj)的取值就是Sj 的行号列号的整数所对应的二进制表示。记Cj=Sj(Bj),0

14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7, 0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8, 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13, S2:

15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,

3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,

0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,

13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,

S3:

10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,

13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,

13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,

1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,

S4:

7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,

13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,

10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,

3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,

S5:

2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,

14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,

4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,

11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,

S6:

12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,

10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,

9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,

4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,

S7:

4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,

13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,

1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,

6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,

S8:

13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,

1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,

7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,

2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11,

d、将长度为32的比特串C=C1 C2 C3 C4 C5 C6 C7 C8通过一个固定的置换P

置换,将所得结果P(C)记为f(A,J)。

(3) 对比特串R16 L16应用初始置换IP的逆置换IP-1,获得密文Y,即Y=IP-1(R16

L16)。

b.子密钥生成过程

密钥方案计算:每一轮都是用不同的、从初始密钥或称种子密钥K导出的48

比特密钥Ki 。K 是一个长度为64的比特串,实际上除去校验比特只有56比特有效:

(1) 给定一个64比特的密钥K ,删掉8个校验比特并利用一个固定的置换

PC-1置换K 的剩下的56比特,记PC-1(K) = C0D0,这里C0D0是PC-1(K)的前28比特、后28比特。

(2) 对每一个i ,0

i

C

其中LSi 表示一个或两个位置的左循环移位,当i=1,2,9,4,16时,一个位置,当i=3,4,5,6,7,8,10,11,12,13,14,15时,移动两个位置。PC-2是另一个固定置换。

C. 解密过程

与加密的过程相同,是加密的逆过程,区别在于加密输入明文输出密文而脱密输入密文输出明文,16个内部密钥加密的顺序和解密的顺序相反。

d. 加密算法流程图

(1) 加密算法

输入64比特明文X ,经过16轮变换,输出64比特密文Y

相关文档
最新文档