DES加密算法的分析与实现实验指导书Word文件下载.docx

上传人:b****4 文档编号:16498441 上传时间:2022-11-24 格式:DOCX 页数:20 大小:73.13KB
下载 相关 举报
DES加密算法的分析与实现实验指导书Word文件下载.docx_第1页
第1页 / 共20页
DES加密算法的分析与实现实验指导书Word文件下载.docx_第2页
第2页 / 共20页
DES加密算法的分析与实现实验指导书Word文件下载.docx_第3页
第3页 / 共20页
DES加密算法的分析与实现实验指导书Word文件下载.docx_第4页
第4页 / 共20页
DES加密算法的分析与实现实验指导书Word文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

DES加密算法的分析与实现实验指导书Word文件下载.docx

《DES加密算法的分析与实现实验指导书Word文件下载.docx》由会员分享,可在线阅读,更多相关《DES加密算法的分析与实现实验指导书Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。

DES加密算法的分析与实现实验指导书Word文件下载.docx

这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。

  通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。

 2、DES算法加密过程:

2.1、加密流程图如下所示:

 

2.2、明文的初始置换:

是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则见下表:

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,

  即将输入的第58位换到第一位,第50位换到第2位,...,依此类推,最后一位是原来的第7位。

L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:

设置换前的输入值为D1D2D3......D64,则经过初始置换后的结果为:

L0=D58D50...D8;

R0=D57D49...D7。

2.3、子密钥ki(k1-k16)的生成:

•第一步:

将64位密钥除去第8,…,64位形成56位密钥。

•第二步:

对56位密钥进行位置置换PC1。

•第三步:

将56位的密钥分左右各28位。

•第四步:

分别对两个部分进行一定次数的循环左移。

•第五步:

经置换运算PC2,形成本轮的子密钥Ki.

•第六步:

将第4步的输出送入第2步继续迭代直至16轮结束,便生成了16个子密钥。

             子密钥生成流程图

◆其中pc1矩阵为(方法和前面的明文置换矩阵一致):

57 

49 

41 

33 

25 

17 

58 

50 

42 

34 

26 

18 

10 

59 

51 

43 

35 

27 

19 

11 

60 

44 

36 

65 

55 

47 

39 

31 

23 

15 

62 

54 

46 

38 

30 

22

14 

61 

53 

45 

37 

29 

21 

13 

28 

20 

12 

◆其中置换选择矩阵pc2为

24 

28

4

16 

52 

40 

48 

56 

32 

◆其中循环左移的位数为:

1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1(即第一次循环左移1位,第三次为2位,……第十五次为2位,第十六次为1位)

2.4、DES算法中跌代过程

第一步:

将上轮计算结果分为左右32位两个部分。

对右部进行扩展置换运算E,将数据扩展为48位。

和本轮的子密钥进行异或操作。

压缩置换运算S,将数据压缩为32位。

置换运算P。

和左部32位进行异或操作。

将结果输出到结果的右部

结果的左部直接由上轮输入数据的右部构成。

组合左部和右部就形成了下一轮输入的数据。

◆其中:

扩展转换运算E为(将32位扩展成48位)

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为:

16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,

2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25,

◆压缩置换运算S计算过程为:

将输入的48位数据自左至右分成8组,每组6位,送入8个Si子运算中,Si子运算是一个非线性代换运算,Si的输出为4位,将8个输出组合后即形成了32位的数据。

每个Si的运算如下:

将输入的1,6位组合形成行,将2,3,4,5位组合形成列

在Si中的对应行列的数字即为Si的输出

选择函数Si

S1:

  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,

这里举一个例子:

假设S4的输入为101100,则1,6位组合为10,即第2行,则2,3,4,5位组合为0110,即第6列,因此S4的输出应该是第2行第6列的数字7,即0111。

2.5、逆初始置换:

(和初始转换的方法一样)

  经过16次迭代运算后。

得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。

逆置换正好是初始置的逆运算,例如,第1位经过初始置换后,处于第40位,而通过逆置换,又将第40位换回到第1位,其逆置换规则如下表所示:

  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,5826,33,1,41,9,49,17,57,25,  

3、DES算法举例

•假设明文m=computer,密钥m=program

   m=01100011011011110110110101110000

  01110101011101000110010101110010

   k=01110000011100100110111101100111

  011100100110000101101101

•其中01100011和01101111分别是c和o的ASCII码,余此类推。

这里k只有56位,必须插进第8,16,24,32,40,48,56,64位的奇偶校验位成64比特位。

其实,这8位对加密过程无影响。

•明文m经过IP1置换后得:

L0=11111111101110000111011001010111

R0=00000000111111110000011010000011

密钥k经过PC-1置换后得:

C0=1110110010011001000110111011

D0=1011010001011000100011100110

各左移1位后通过PC-2得48位子密钥k1:

  k1=00111101100011111001101

00110111001111101001000

•R0(32位),经过置换运算E膨胀为48位:

100000000001011111111110

100000001101010001001000

再和k1作异或运算得到:

101111011001100000110011

101101111110101101001110

分成8组:

101111011001100000110011

101101111110101101001110

•通过S运算输出为32位:

01110110001101000010011010100001

以S1子运算为例:

输入为101111,

行b1b6(11)=3,

列b2b3b4b5(0111)=7,

S1矩阵中第3行第7列的数字为7(0111),

故输出为0111。

其它7个子运算类似。

•S运算结果经过置换运算P后的结果为:

01000100001000001001111010011111

经过第1轮迭代的结果为:

00000000111111110000011010000011

10111011100110001110100011001000

经过第16轮迭代的结果经IP2置换运算后的结果即为密文:

01011000101010000100000110111000

01101001111111101010111000110011

对于DES的加密结果来说,每一比特都是明文m和密钥k的每一比特的复杂函数,即明文m或密钥k改变一个比特都将对密文产生剧烈影响。

4、数据的解密

数据解密的算法与加密算法相同,区别在于1.2.3步中和数据进行按位异或的密钥的使用顺序不同,在加密中是按照第i次迭代就采用第i次迭代生成的密钥进行异或,而解密时第i次迭代就采用第17-i次迭代生成的密钥和数据进行异或.

四、实验要求

按上面所介绍的加密、解密算法用一种程序工具(如C)编程实现DES算法。

五、实验报告要求

1、详细地写出实现此算法的思想;

2、写出程序代码。

六、实验成绩评定

1、上机考勤占20%;

2、详细写出程序的设计思想占20%;

3、DES程序的实现占20%;

4、实验报告占40%。

七、附件:

程序代码

#include<

stdlib.h>

stdio.h>

string.h>

#defineENCRYPT1

#defineDECRYPT0

staticvoidprintHex(char*cmd,intlen);

staticvoidprintArray(constchar*In,intlen);

staticvoidF_func(boolIn[32],constboolKi[48]);

//注释此函数的作用

staticvoidS_func(boolOut[32],constboolIn[48]);

staticvoidTransform(bool*Out,bool*In,constchar*Table,intlen);

staticvoidXor(bool*InA,constbool*InB,intlen);

staticvoidRotateL(bool*In,intlen,intloop);

staticvoidByteToBit(bool*Out,constchar*In,intbits);

staticvoidBitToByte(char*Out,constbool*In,intbits);

//注释以下函数的作用

staticboolSubKey[16][48];

//注释以下代码的作用

conststaticcharPC1_Table[56]=

{

57,49,41,33,25,17,9,

1,58,50,42,34,26,18,

10,2,59,51,43,35,27,

19,11,3,60,52,44,36,

63,55,47,39,31,23,15,

7,62,54,46,38,30,22,

14,6,61,53,45,37,29,

21,13,5,28,20,12,4

};

conststaticcharLOOP_Table[16]=

1,1,2,2,2,2,2,2,

1,2,2,2,2,2,2,1

conststaticcharPC2_Table[48]=

14,17,11,24,1,5,

3,28,15,6,21,10,

23,19,12,4,26,8,

16,7,27,20,13,2,

41,52,31,37,47,55,

30,40,51,45,33,48,

44,49,39,56,34,53,

46,42,50,36,29,32

voidF_funcstaticconstcharE_Table[48]=

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

conststaticcharP_Table[32]=

16,7,20,21,

29,12,28,17,

1,15,23,26,

5,18,31,10,

2,8,24,14,

32,27,3,9,

19,13,30,6,

22,11,4,25,

conststaticcharS_Box[8][4][16]=

{

//S1

{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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1