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所示。

接下來對每一個流程進行詳細介紹。

圖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所示。

圖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盒對各組進行代替操作。

https://images2015.cnblogs.com/blog/802212/201610/802212-20161009224305409-828457392.png

        圖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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章