DES算法xx.docx

上传人:b****5 文档编号:5026626 上传时间:2022-12-12 格式:DOCX 页数:24 大小:47.27KB
下载 相关 举报
DES算法xx.docx_第1页
第1页 / 共24页
DES算法xx.docx_第2页
第2页 / 共24页
DES算法xx.docx_第3页
第3页 / 共24页
DES算法xx.docx_第4页
第4页 / 共24页
DES算法xx.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

DES算法xx.docx

《DES算法xx.docx》由会员分享,可在线阅读,更多相关《DES算法xx.docx(24页珍藏版)》请在冰豆网上搜索。

DES算法xx.docx

DES算法xx

DES算法及其实现

美国国家标准局(NBS)于1997年公布了一个由IBM公司研制的一种加密算法,并且确定为非机要部门使用的数据加密标准,简称DES(DataEncryptonStandard)。

自公布之日起,DES算法作为国际上商用保密通信和计算机通信的最常用算法,一直活跃在国际保密通信的舞台上,扮演了十分突出的角色。

DES算法由加密、子密钥和解密的生成三部分组成。

现将DES算法介绍如下。

一.加密

DES算法处理的数据对象是一组64比特的明文串。

设该明文串为m=m1m2…m64(mi=0或1)。

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

其加密过程图示如下:

DES算法加密过程

对DES算法加密过程图示的说明如下:

待加密的64比特明文串m,经过IP置换(初始置换)后,得到的比特串的下标列表如下:

IP

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

该比特串被分为32位的L0和32位的R0两部分。

R0子密钥K1(子密钥的生成将在后面讲)经过变换f(R0,K1)(f变换将在下面讲)输出32位的比特串f1,f1与L0做不进位的二进制加法运算。

运算规则为:

f1与L0做不进位的二进制加法运算后的结果赋给R1,R0则原封不动的赋给L1。

L1与R0又做与以上完全相同的运算,生成L2,R2……一共经过16次运算。

最后生成R16和L16。

其中R16为L15与f(R15,K16)做不进位二进制加法运算的结果,L16是R15的直接赋值。

R16与L16合并成64位的比特串。

值得注意的是R16一定要排在L16前面。

R16与L16合并后成的比特串,经过置换IP-1(终结置换)后所得比特串的下标列表如下:

IP-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

58

26

33

1

41

9

49

17

57

25

经过置换IP-1后生成的比特串就是密文e.。

变换f(Ri-1,Ki):

它的功能是将32比特的输入再转化为32比特的输出。

其过程如图所示:

f变换说明:

输入Ri-1(32比特)经过变换E(扩展置换E)后,膨胀为48比特。

膨胀后的比特串的下标列表如下:

E

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

膨胀后的比特串分为8组,每组6比特。

各组经过各自的S盒后,又变为4比特(具体过程见后),合并后又成为32比特。

该32比特经过P变换(压缩置换P)后,其下标列表如下:

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

经过P变换后输出的比特串才是32比特的f(Ri-1,Ki)。

S盒的变换过程:

任取一S盒。

见图:

在其输入b1,b2,b3,b4,b5,b6中,计算出x=b1*2+b6,y=b5+b4*2+b3*4+b2*8,再从Si表中查出x行,y列的值Sxy。

将Sxy化为二进制,即得Si盒的输出。

S盒:

以上是DES算法加密原理

二、子密钥的生成

64比特的密钥生成16个48比特的子密钥。

其生成过程见图:

子密钥生成过程

具体解释如下:

64比特的密钥K,经过PC-1(置换A)后,生成56比特的串。

其下标如表所示:

PC-1

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

该比特串分为长度相等的比特串C0和D0。

然后C0和D0分别循环左移1位,得到C1和D1。

C1和D1合并起来生成C1D1。

C1D1经过PC-2(置换B)变换后即生成48比特的K1。

K1的下标列表为:

PC-2

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

C1、D1分别循环左移LS2位,再合并,经过PC-2,生成子密钥K2……依次类推直至生成子密钥K16。

注意:

Lsi(I=1,2,….16)的数值是不同的。

具体见下表:

迭代顺序

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

左移位数

1

1

2

2

2

2

2

2

1

2

2

2

2

2

2

1

三.解密

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。

其程序源代码与加密相同。

四.示例

例如:

已知明文m=learning,密钥k=computer。

明文m的ASCII二进制表示:

m=0110110001100101011000010111001001101110011010010110111001100111

密钥k的ASCII二进制表示:

k=0110001101101111011011010111000001110101011101000110010101110010

第一步:

明文m经过IP置换(初始置换):

IP

58/1

50/1

42/1

34/1

26/1

18/1

10/1

2/1

60/0

52/0

44/0

36/0

28/1

20/0

12/0

4/0

62/1

54/1

46/0

38/1

30/0

22/0

14/1

6/1

64/1

56/0

48/1

40/0

32/0

24/1

16/1

8/0

57/0

49/0

41/0

33/0

25/0

17/0

9/0

1/0

59/1

51/1

43/1

35/1

27/1

19/1

11/1

3/1

61/0

53/1

45/1

37/1

29/0

21/0

13/0

5/1

63/1

55/1

47/0

39/1

31/1

23/0

15/0

7/0

得到:

m’=1111111100001000110100111010011000000000111111110111000111011000

第二步:

迭代:

1.第1次迭代:

m’等分为左右两段:

L0=11111111000010001101001110100110

R0=00000000111111110111000111011000

(1)R0经过变换E(扩展置换E)后,扩展为48位。

E

32/0

1/0

2/0

3/0

4/0

5/0

4/0

5/0

6/0

7/0

8/0

9/1

8/0

9/1

10/1

11/1

12/1

13/1

12/1

13/1

14/1

15/1

16/1

17/0

16/1

17/0

18/1

19/1

20/1

21/0

20/1

21/0

22/0

23/0

24/1

25/1

24/1

25/1

26/1

27/0

28/1

29/1

28/1

29/1

30/0

31/0

32/0

1/0

R0’=000000000001011111111110101110100011111011110000

(2)生成子密钥K1

①k=0110001101101111011011010111000001110101011101000110010101110010经过PC-1(置换A):

PC-1

57/0

49/0

41/0

33/0

25/0

17/0

9/0

1/0

58/1

50/1

42/1

34/1

26/1

18/1

10/1

2/1

59/1

51/1

43/1

35/1

27/1

19/1

11/1

3/1

60/1

52/0

44/1

36/1

63/1

55/0

47/0

39/0

31/0

23/0

15/1

7/1

62/0

54/1

46/1

38/1

30/0

22/1

14/1

6/0

61/0

53/0

45/0

37/0

29/0

21/1

13/1

5/0

28/1

20/0

12/0

4/0

后,得到C0和D0:

C0=0000000011111111111111111011D0=1000001101110110000001101000

②C0和D0分别循环左移1位,得到C1和D1:

C1=0000000111111111111111110110D1=0000011011101100000011010001

③C1D1经过PC-2(置换B):

PC-2

14/1

17/1

11/1

24/1

1/0

5/0

3/0

28/0

15/1

6/0

21/1

10/1

23/1

19/1

12/1

4/0

26/1

8/1

16/1

7/0

27/1

20/1

13/1

2/0

41/1

52/1

31/0

37/1

47/0

55/0

30/0

40/0

51/0

45/0

33/0

48/0

44/0

49/1

39/1

56/1

34/1

53/0

46/0

42/1

50/1

36/0

29/0

32/0

得到K1:

K1=111100001011111011101110110100000000011110011000

(3)f函数运算

①R0’与K1异或运算

R0’⊕K1=000000000001011111111110101110100011111011110000⊕

111100001011111011101110110100000000011110011000

=111100001010100100010000011010100011100101101000

②S盒运算

将R0’⊕K1按6位一组分配给8个S盒,输出8×4位数S1-8:

S1(111100)=S1(10,1110)=S1(2,14)=5

S2(001010)=S2(00,0101)=S2(0,5)=11

S3(100100)=S3(10,0010)=S3(2,2)=4

S4(010000)=S4(00,1000)=S4(0,8)=1

S5(011010)=S5(00,1101)=S5(0,13)=0

S6(100011)=S6(11,0001)=S6(3,1)=3

S7(100101)=S7(11,0010)=S7(3,2)=13

S8(101000)=S8(10,0100)=S8(2,4)=9

S1-8=01011011010000010000001111011001

③S1-8经过P变换(压缩置换P)压缩:

P

16/1

7/1

20/0

21/0

29/1

12/0

28/1

17/0

1/0

15/0

23/1

26/1

5/1

18/0

31/0

10/1

2/1

8/1

24/1

14/0

32/1

27/0

3/0

9/0

19/0

13/0

30/0

6/0

22/0

11/0

4/1

25/1

输出32位f1(R0,K1)=11001010001110011110100000000011

(4)计算R1、L1,第一次迭代结束。

R1=L0⊕f1=11111111000010001101001110100110⊕

11001010001110011110100000000011

=00110101001100010011101110100101

L1=R0=R0=00000000111111110111000111011000

2.第2次迭代:

(1)R1经过变换E(扩展置换E)后,扩展为48位。

E

32/1

1/0

2/0

3/1

4/1

5/0

4/1

5/0

6/1

7/0

8/1

9/0

8/1

9/0

10/0

11/1

12/1

13/0

12/1

13/0

14/0

15/0

16/1

17/0

16/1

17/0

18/0

19/1

20/1

21/1

20/1

21/1

22/0

23/1

24/1

25/1

24/1

25/1

26/0

27/1

28/0

29/0

28/0

29/0

30/1

31/0

32/1

1/0

R1’=100110101010100110100010100111110111110100001010

(2)生成子密钥K2

①C1和D1分别循环左移1位,得到C2和D2:

C2=0000001111111111111111101100D2=0000110111011000000110100010

②C2D2经过PC-2(置换B):

PC-2

14/1

17/1

11/1

24/0

1/0

5/0

3/0

28/0

15/1

6/0

21/1

10/1

23/1

19/1

12/1

4/0

26/1

8/1

16/1

7/1

27/0

20/1

13/1

2/0

41/1

52/0

31/0

37/1

47/0

55/1

30/0

40/1

51/1

45/0

33/1

48/1

44/0

49/1

39/0

56/0

34/1

53/0

46/0

42/0

50/0

36/1

29/0

32/0

得到K2=111000001011111011110110100101011011010010000100

(3)f函数运算

①R1’与K2异或运算

R1’⊕K2=100110101010100110100010100111110111110100001010⊕

111000001011111011110110100101011011010010000100

=011110100001011101010100000010101100100110001110

②S盒运算

将R1’⊕K2按6位一组分配给8个S盒,输出8×4位数S1-8:

S1(011110)=S1(00,1111)=S1(0,15)=7

S2(100001)=S2(11,0000)=S2(3,0)=13

S3(011101)=S3(01,1110)=S3(1,14)=15

S4(010100)=S4(00,1010)=S4(0,10)=8

S5(000010)=S5(00,0001)=S5(0,1)=12

S6(101100)=S6(10,0110)=S6(2,6)=12

S7(100110)=S7(10,0011)=S7(2,3)=13

S8(001110)=S8(00,0111)=S8(0,7)=1

S1-8=01111101111110001100110011010001

③S1-8经过P变换(压缩置换P)压缩:

P

16/0

7/0

20/0

21/1

29/0

12/1

28/1

17/1

1/0

15/0

23/0

26/1

5/1

18/1

31/0

10/1

2/1

8/1

24/0

14/0

32/1

27/0

3/1

9/1

19/0

13/1

30/0

6/1

22/1

11/1

4/1

25/1

输出32位f2(R0,K1)=00010111000111011100101101011111

(3)计算R2、L2,第二次迭代结束。

R2=L1⊕f2=00000000111111110111000111011000⊕

00010111000111011100101101011111

=00010111111000101011101010000111

L2=R1=00110101001100010011101110100101

3.第3次迭代:

16.第16次迭代:

L16=01010000111001001101110110100011R16=01111101101010000100110001100001

第三步:

终结置换:

①R16与L16合并成64位(R16排在L16前面)m”:

m”=0111110110101000010011000110000101010000111001001101110110100011。

②m”经过置换IP-1(终结置换):

IP-1

40/0

8/1

48/0

16/0

56/1

24/0

64/1

32/1

39/0

7/0

47/0

15/0

55/0

23/0

63/1

31/0

38/0

6/1

46/1

14/0

54/1

22/1

62/0

30/0

37/0

5/1

45/0

13/1

53/1

21/1

61/0

29/0

36/1

4/1

44/0

12/0

52/1

20/0

60/0

28/0

35/0

3/1

43/1

11/1

51/0

19/0

59/1

27/1

34/1

2/1

42/1

10/0

50/1

18/1

58/0

26/1

33/0

1/0

41/1

9/1

49/1

17/0

57/1

25/0

得到密文:

0100101100000010011011000101110011001000011100111110110100111010

经过16次迭代后,所得结果为:

L1=00000000111111110111000111011000R1=00110101001100010011101110100101

L2=00110101001100010011101110100101R2=00010111111000101011101010000111

L3=00010111111000101011101010000111R3=00111110101100010000101110000100

L4=00111110101100010000101110000100R4=11110111110101111111101000111110

L5=11110111110101111111101000111110R5=10010110011001110100111111100101

L6=10010110011001110100111111100101R6=11001011001010000101110110100111

L7=11001011001010000101110110100111R7=01100011110011101000111011011001

L8=01100011110011101000111011011001R8=01001011110100001111001000000100

L9=01001011110100001111001000000100R9=00011101001101111010111011100001L

10=00011101001101111010111011100001R10=11101110111110111111010100000101L

11=111011*********11111010100000101R11=01101101111011011110010111111000

L12=011011011110110111100101111110

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

当前位置:首页 > 高等教育 > 军事

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

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