DES加密算法(带示例)

原创不易,转载请注明出处。

目录

1.      算法简介

2.      符号

3.      加密算法流程

3.1 密钥置换

3.2 IP(初始)置换

3.3 加密处理

3.4 IP逆置换

4.      解密算法流程

5.      总结

附录A 运算示例

1.算法简介

DES(Data Encrytion Standard)算法,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。

明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

DES算法属于对称加密算法,加密解密公用一套算法。

本文将通过实例,详细介绍DES加密算法的加密流程和解密流程。

2.符号

下列符号适用于本文本。

 Ci:密钥置换后左半部分,28bit

 Di:密钥置换后右半部分,28bit

 Ki:密钥置换后生成的48bit压缩密钥

 Li:每轮明文置换后输出64bit的左半部分,32bit

 Ri:每轮明文置换后输出64bit的右半部分,32bit

 ⊕:异或运算

3.加密算法流程

DES加密算法流程图如图3-1所示。

接下来对每一个流程进行详细介绍。

DES加密算法(带示例)_第1张图片

图3-1 DES加密算法流程图

3.1 密钥置换

1)首先对8字节(64bit)的原始密钥按照表3-1进行置换,即原始数据的57位放在新数据的第1位,原始数据的第49位放在新数据第2位,以此类推。最终得到56位新密钥。

注意置换时只用到原始密钥56bit,第8/16/24/32/40/48/56/64位是密钥的奇偶校验位,不做置换处理。表3-1中也没有8/16/24/32/40/48/56/64这8个位。

                               表3-1 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

2)再将56位新密钥分成左右两部分C0和D0,每部分28bit。

3)根据轮数,将Ci和Di分别循环左移1位或2位,每轮循环左移位数如表3-2所示。(注意:循环左移是在上一轮的基础上循环左移)

                            表3-2  Ci和Di 每轮循环左移位数

轮数

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

4)将循环左移的 和 合并起来,按照表3-3置换,得到48bit压缩密钥 Ki,此过程称为压缩置换。

                                   表3-3 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

经过3)和4)步,得到16个48bit的压缩密钥 K1~K16。

3.2 IP(初始)置换

64bit的明文首先要按照表3-4进行IP置换,即原始数据的58位放在新数据的第1位,原始数据的第50位放在新数据第2位,以此类推。得到新的64bit数据分成L0 和R0 左右两部分,每部分为32bit。

                                表3-4 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

3.3 加密处理

由图3-1,经过IP置换后,接下来需要进行16轮完全相同的迭代运算。每一次迭代都需要压缩密钥 参与。每轮迭代过程如下式所示:

函数f输入为32位 和48位 ,输出32位数据。包含3步运算:E扩展置换、S盒代替、P盒置换。函数f流程图如图3-2所示。

DES加密算法(带示例)_第2张图片

图3-2 函数f流程图

3.3.1 E扩展置换

E扩展置换目标是将置换后的右半部分Ri 作为输入,扩展为48位(分为4位×8组)输出。

E扩展置换目的有两个:①生成与密钥相同长度的数据以进行异或运算;②提供更长的结果,在后续的替代运算中可以进行压缩。

E扩展置换原理如下表:

                                     表3-5 扩展置换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

表中的数字代表位,两列黄色数据是扩展的数据,可以看出,扩展的数据是从相邻两组分别取靠近的一位,4位变为6位。靠近32位的位为1,靠近1位的位为32。表中第二行的4取自上组中的末位,9取自下组中的首位。

3.3.2 S盒代替

压缩后的密钥 与扩展置换异或以后得到48位的数据,将这个数据送人S盒,进行替代运算。替代由8个不同的S盒完成,每个S盒有6位输入4位输出。48位输入分为8个6位的分组,一个分组对应一个S盒,对应的S盒对各组进行代替操作。

DES加密算法(带示例)_第3张图片

        图3-3 S盒代替示意图

一个S盒就是一个4行16列的表,盒中的每一项都是一个4位的数。S盒的6个输入确定了其对应的输出在哪一行哪一列,输入的高低2位做为行数H,中间4位做为列数L,在 中查找第H行L列对应的数据。

                        表3-6  S-box1

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

                        表3-7 S-box2

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

                        表3-8 S-box3

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

                        表3-9 S-box4

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

19

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

                       表3-10 S-box5

2

12

4

1

7

10

11

6

5

8

3

15

13

0

14

9

14

11

2

12

4

7

13

1

5

0

15

13

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

                       表3-11 S-box6

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

                       表3-12 S-box7

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

                      表3-13 S-box8

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

例如,假设S盒8的输入为110011,第1位和第6位组合为11,对应于S盒8的第3行;第2位到第5位为1001,对应于S盒8的第9列。S盒8的第3行第9列的数字为12,因此用1100来代替110011。注意,S盒的行列计数都是从0开始

代替过程产生8个4位的分组,组合在一起形成32位数据。

S盒代替是DES算法的关键步骤,所有的其他的运算都是线性的,易于分析,而S盒是非线性的,相比于其他步骤,提供了更好安全性。

3.3.3 P盒置换

S盒置换后,得到一个32位输出,将此输出按照P盒进行置换。该置换把输入的每位映射到输出位,任何一位不能被映射两次,也不能被略去,映射规则如表3-14所示:

                                   表3-14 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执行完毕。

3.4 IP逆置换

经过16轮加密处理,最终得到L16和R16 。然后将 和 互换位置,合并成一个64位数进行IP逆置换。逆置换规则如表3-15所示。

表3-15 逆置换规则

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

逆置换之后得到64位密文。

4.解密算法流程

加密和解密使用相同的算法。唯一不同的是密钥的次序是相反的。即如果每一轮的加密密钥分别是 K1、K2 ……K16 ,那么解密密钥就是 K16、K15 ……K1 。产生压缩密钥的算法也是循环的。加密是密钥循环左移,解密是密钥循环右移。解密密钥每次移动的位数是:0、1、2、2、2、2、2、2、1、2、2、2、2、2、2、1。

5.总结

DES是比较早的对称加密算法,算法相对简单。但是目前DES已经不安全,例如:1999年1月,RSA数据安全公司宣布:该公司所发起的对56位DES的攻击已经由一个称为电子边境基金(EFF)的组织,通过互联网上的100000台计算机合作在22小时15分钟内完成。

在这种情况下,对于替代DES的要求日益增多。最终,NIST于1997年发布公告,征集新的数据加密标准作为联邦信息处理标准以代替DES。新的数据加密标准称为AES。

尽管如此,DES的出现是现代密码学历史上非常重要的事件。它对于我们分析掌握分组密码的基本理论与设计原理仍然具有重要的意义。

附录A 运算示例

输入消息(8字节)

0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef

原始密钥(8字节)

0x13,0x34,0x57,0x79,0x9b,0xbc,0xdf,0xf1

压缩密钥:

 C0C1……C16(每字节低7位有效)             D1D2……D16(每字节低7位有效)

 C0:0x78    0x33      0x15      0x2f               D0:0x2a    0x59      0x4f       0x0f

 C1:0x70    0x66      0x2a      0x5f               D1:0x55    0x33      0x1e      0x1e

 C2:0x61    0x4c      0x55      0x3f               D2:0x2a    0x66      0x3c      0x3d

 C3:0x06    0x32      0x55      0x7f               D3:0x2b    0x19      0x71      0x75

 C4:0x19    0x4a      0x57      0x7c              D4:0x2c    0x67      0x47      0x55

 C5:0x66    0x2a      0x5f       0x70              D5:0x33    0x1e      0x1e      0x55

 C6:0x19    0x2a      0x7f       0x43              D6:0x4c    0x78      0x7a      0x55

 C7:0x65    0x2b      0x7e      0x0c              D7:0x33   0x63      0x6a      0x56

 C8:0x15    0x2f       0x78      0x33              D8:0x4f    0x0f       0x2a      0x59

 C9:0x2a    0x5f       0x70      0x66              D9:0x1e    0x1e      0x55      0x33

 C10:0x2a   0x7f       0x43      0x19              D10:0x78   0x7a      0x55      0x4c

 C11:0x2b   0x7e      0x0c      0x65              D11:0x63   0x6a      0x56      0x33

 C12:0x2f    0x78      0x33      0x15              D12:0x0f   0x2a      0x59      0x4f

 C13:0x3f    0x61      0x4c      0x55              D13:0x3d   0x2a      0x66      0x3c

 C14:0x7f    0x06      0x32      0x55              D14:0x75   0x2b      0x19      0x71

 C15:0x7c   0x19      0x4a      0x57              D15:0x55   0x2c      0x67      0x47

 C16:0x78   0x33      0x15      0x2f               D16:0x2a   0x59      0x4f       0x0f

 K0,K1……K16(每字节低6位有效)

 K0:0x78   0x33      0x15      0x2f       0x2a      0x59      0x4f       0x0f

 K1:0x06    0x30      0x0b      0x2f       0x3f       0x07      0x01      0x32

 K2:0x1e    0x1a      0x3b      0x19      0x36      0x3c      0x27      0x25

 K3:0x15    0x1f       0x32      0x0a      0x10      0x2c      0x3e      0x19

 K4:0x1c    0x2a      0x37      0x16      0x36      0x33      0x14      0x1d

 K5:0x1f    0x0e      0x30      0x07      0x3a      0x35      0x0e      0x28

 K6:0x18   0x3a      0x14      0x3e      0x14      0x07      0x2c      0x2f

 K7:0x3b   0x08      0x12      0x37      0x3d      0x21      0x22      0x3c

 K8:0x3d    0x38      0x28      0x3a      0x30      0x13      0x2f       0x3b

 K9:0x38   0x0d      0x2f       0x2b      0x3b      0x1e      0x1e      0x01

 K10:0x2c   0x1f       0x0d      0x07      0x2e      0x24      0x19      0x0f

 K11:0x08   0x15      0x3f       0x13      0x37      0x2d      0x0e      0x06

 K12:0x1d  0x17      0x07      0x35      0x25      0x06      0x1f       0x29

 K13:0x25   0x3c      0x17      0x11      0x3e      0x2b      0x29      0x01

 K14:0x17  0x34      0x0e      0x37      0x3c      0x2e      0x1c      0x3a

 K15:0x2f   0x39      0x06      0x0d      0x0f       0x13      0x3c      0x0a

 K16:0x32  0x33      0x36      0x0b      0x03      0x21      0x1f       0x35

IP置换,得到L0和R0

 L0:0xcc00ccff

 R0:0xf0aaf0aa

加密处理,得到L1~L16和R1~R16

L1~L16:  

0xf0aaf0aa          0xef4a6544         0xcc017709         0xa25c0bf4

0x77220045        0x8a4fa637         0xe967cd69        0x064aba10

0xd5694b90        0x247cc67a         0xb7d5d7b2        0xc5783c78

0x75bd1858        0x18c3155a         0xc28c960d        0x43423234

R1~R16:  

0xef4a6544         0xcc017709         0xa25c0bf4         0x77220045

0x8a4fa637         0xe967cd69        0x064aba10         0xd5694b90

0x247cc67a         0xb7d5d7b2        0xc5783c78         0x75bd1858

0x18c3155a         0xc28c960d        0x43423234        0x0a4cd995

IP逆置换,得到密文

0x85      0xe8      0x13      0x54      0x0f       0x0a      0xb4      0x05

 

参考文献:

[1]https://blog.csdn.net/qq_27570955/article/details/52442092

[2]https://www.cnblogs.com/songwenlong/p/5944139.html

 

 

 

你可能感兴趣的:(加密算法)