当前位置:   article > 正文

2、DES算法_des加密

des加密

参考:

经典的DES算法详解

DES加密解密算法(简单、易懂、超级详细)_des算法-CSDN博客

DES算法详解及实现(C语言)_c语言实现des算法-CSDN博客

通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理。Python DES实现源码-CSDN博客


目录

DES算法

DES算法产生

DES算法流程

1、子密钥生成

2、加密

DES算法相关                           

3DES算法


DES算法

       DES算法(Data Encryption Standard)又被称为美国数据加密标准,是1972年美国IBM公司研制的对称加密算法。在设计上,DES采用了Feistel结构。 DES是一个分组密码算法,明文和密文的长度相同,分组长度为64位。加解密用的都是同一个密钥,密钥长度为64位,其中第8、16、24、32、40、48、56、64位是奇偶校验位,使得密钥中每8位都有奇数个1,因此,有效密钥长度为56位。分组后的明文组和56位的密钥按位替代或交换的方法得到密文组。

加密过程简述: 

  1. 明文分组为多个64位明文块,不足64位补足64位;
  2. 64位密钥生成16个48位子密钥:置换选择PC1->循环左移->置换选择PC2
  3. 64位明文块初始置换IP;明文块被分为左右两部分,每部分32位,以L0,R0表示;
  4. 引入16个子秘钥,进行16轮迭代运算:扩展运算E->S盒运算->置换P,得到L16,R16;
  5. 将L16,R16连接在一起,并进行逆初始置换
  6. 输出64位密文块;密文全部输出。 

注:64位明文  64位密文    56位密钥+8位校验位--64位密钥

DES算法产生

美国国家标准局催生了DES:1973年5月,在尼克松任期,美国国家标准局下发了红头文件,征求加密算法来保护传输过程中的数据。国家标准局等了很久一直没有人投标,一直到1974年8月6日,尼克松卸任前三天,IBM才拿出了自己家开发的一套代号LUCIFER(金星)的东西。美国安全局评估后,在1977年7月15日采用了LUCIFER的一个变种作为数据加密标准DES。

DES很快被非数字媒体采用,比如电话线中的信号加密。在那些年里,国际香料组织IFF曾用DES来加密那些用电话线传输的秘密配方。同时,作为政府之后第二大急需加密的银行业也将DES作为广泛应用的标准,美国国家标准协会ANSI制定了整个银行业的加密规范。1980年采用的ANSI X3.92指定了DES算法的应用。

DES算法流程

1、子密钥生成

        子密钥生成:56位密钥->16个48位子密钥     

          1)置换选择PC1:去除第8位奇偶校验位(使密钥位奇数个1,例如:加密密钥64 位二进制表示:01001001 01001100 01001111 01010111 01000101 01011000 01001110 01010100),将其余56位密钥位打乱重排,前28位C0,后28位D0。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

 37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

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)循环左移:将Ci-1和Di-1进行循环左移变化得到Ci和Di,位数不变。

i

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

LSi

1

1

2

2

2

2

2

2

1

2

2

2

2

2

2

1

        3)置换选择PC2:将Ci与Di合成56位中间数据,并从56位中间数据中选择一个48位的子密钥Ki(i:1~16)。这个过程中,既置换了每位的顺序,又获得了子密钥Ki,因此也可以称为压缩置换

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

        4)循环2、3过程,直至生成16个48位的子密钥。

2、加密

       1)初始置换IP,目的是将输入的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

        例如:i love you的二进制表示为 01101001 01101100 01101111 01110110 01100101 01111001 01101111 01110101

        经过初始置换IP:11111111 10101000 11011110 11110101 00000000 11111111 01100111 01001100

       L0=11111111 10101000 11011110 11110101

       R0=00000000 11111111 01100111 01001100

        2)16轮feistel结构迭代(轮函数F)

 注意:最后一轮没有交换;

        每轮迭代的过程可以表示如下:

Ln = R(n - 1);

Rn = L(n - 1)⊕f(Rn-1,Kn-1)

        其中,⊕:异或运算;Kn是向第N层输入的48位子秘钥,f是以Rn-1和Kn为变量的输出32位的函数;f函数主要由以下运算构成:选择运算E;密钥异或;S盒代换;置换P。*f函数具体运算过程如下:

        a.选择运算E(也称扩展置换):将Ri-1(即输入A)扩展从32位扩展为48位,32位->48位

        通过扩展置换E,数据的右半部分Ri-1从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

       选择运算的作用:产生与秘钥相同长度的数据以进行异或运算,R0是32位,子秘钥是48位,所以R0要先进行扩展置换之后与子秘钥进行异或运算;提供更长的结果,使得在替代运算时能够进行压缩。

       b.密钥异或:48位中间结果与48位子密钥按位异或;引入密钥

       c.S盒代换:8个S盒,每个6位输入,4位输出,混淆作用,48位->32位

       Rn扩展置换之后与子秘钥Kn异或以后的结果作为输入块,功能是把48位数据压缩为32位数据,由8个不同的代替盒(S盒)完成。每个S盒有6位输入,4位输出。48位的输入块被分成8个6位的分组,每一个分组对应一个S盒代替操作。经过S盒代替,得到8个4位分组结果—32

       例如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

       例如:S1输入为101010---->>>第一位与第六位组成行(0--3),即10-->2行;其余四位组成列(0--15),即0101-->5列;结果为6-->输出0110

注:每一个S-盒的输入数据是6位,输出数据是4位,但是每个S盒自身是64位!!

       d.置换P:将S盒输出的32位数据打乱重排,扩散作用,32位->32位;结果为一轮f函数输出

167202129122817
11523265183110
282414322739
9133062211425

       异或:置换P输出与Ln-1异或得到Rn,一轮Feistle结构结束。由此,Ri、Li根据Ri-1、Li-1计算得出,并作为新一轮计算的输入。新一轮轮函数:扩展置换E->密钥异或->S盒运算->置换P->异或;总计16轮结束,最终生成L16和R16。

注:最后一轮的左右两部分不交换也不再运算,而是直接合并在一起R16L16,作为逆初始置换的输入块。

       3)逆初始置换IP-1:初始置换IP的逆

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

DES算法相关                           

1、DES解密过程?

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

2、DES算法特点

  • 分组加密算法:以64位为分组;64位明文输入,64位密文输出;
  • 对称算法:加密和解密使用同一秘钥;
  • 有效秘钥长度为56位:秘钥通常表示为64位数,但每个第8位用作奇偶校验,可以忽略;
  • 代替和置换:DES算法是两种加密技术的组合:混乱和扩散;先替代后置换;
  • 易于实现:DES算法只是使用了标准的算术和逻辑运算,其作用的数最多也只有64 位,因此用70年代末期的硬件技术很容易实现算法的重复特性使得它可以非常理想地用在一个专用芯片中;

3、安全性说明

  • 密钥较短:56位有效密钥,密钥量为2的56幂;
  • 存在弱密钥:存在4个弱密钥,至少12个半弱密钥 ; 
  • 已被攻破 : 
  • 需要以安全方式进行密钥交换:密钥管理分发困难。                                                    

4、DES应用

     目前应用较少,沿用的也都尽量采用3DES加密。

3DES算法

       DES是一个经典的对称加密算法,但也缺陷明显,即56位的密钥安全性不足,已被证实可以在短时间内破解。为解决此问题,出现了3DES,也称Triple DES,3DES为DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。为了兼容普通的DES,3DES并没有直接使用加密->加密->加密的方式,而是采用了加密->解密->加密的方式。

        3DES(称为Triple DES)三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解; 3DES是为了增加DES的强度,将DES重复3次所得到的一种密码算法,它相当于是对每个数据块使用三次DES加密算法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

1、加密

        明文经过三次DES处理才能变成最后的密文,由于DES密钥长度实质是56位,因此3DES的密钥长度就是56*3=168比特

       3DES加密过程有三个密钥,密钥1、2、3分别执行加密->解密->加密的操作。

2、解密

       三重DES的解密过程和加密过程正好相反,是以密钥3、2、1的顺序执行解密->加密->解密的操作。

         3、3DES的三次DES加密是(加密->解密->加密),而不是(加密->加密->加密)?

        在加密算法中加入解密操作让人感觉很不可思议,实际上这个方法是IBM公司设计出来的,目的是为了让三重DES能够兼容普通的DES。

        当三重DES中所有的密钥都相同时,三重DES也就等同于普通的DES了。这是因为在前两步加密->解密之后,得到的就是最初的明文。因此,以前用DES加密的密文,就可以通过这种方式用三重DES来进行解密。也就是说,三重DES对DES具备向下兼容性。

    4、3DES特点

  • 分组密码:分组长度8字节(64位);
  • 密钥长度:24字节;168位有效密码;
  • 加密过程:密钥1、2、3---->>>加密、解密、加密;
  • 解密过程:密钥3、2、1---->>>解密、加密、解密;
  • 安全性:安全,进行三次DES加密,密钥位168位;
  • 优点:具有较好的向下兼容性,可以对DES算法升级!
  • 缺点:使用软件实现该算法的的速度较慢!

      5、3DES现状

       尽管三重DES目前还被银行等机构使用,但其处理速度不高,除了特别重视向下兼容性的情况外,很少被用于新的用途。

思考:

1、DES密码在不同的工作模式下的工作情况?数据填充?

2、DES密码的最大优点?

3、DES密码可以被短时间破解是否还有存在的必要?DES密码是否还有发展的潜力?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/546452
推荐阅读
相关标签
  

闽ICP备14008679号