DES算法

来源:互联网 发布:js集合和数组 编辑:程序博客网 时间:2024/06/16 18:48

1.DES算法

DESData Encryption Standard),是IBM在上世纪70年代开发的单密钥对称加解密算法。该算法用56位密钥+8位奇偶校验位=64位的密钥对以64位为单位的数据块进行16轮加解密处理。DES的安全性不依懒于算法的保密,安全性仅以加密密钥的保密为基础。

1.1子密钥生成过程

用户输入的密钥被转化成64比特的二进制,然后按照密钥置换函数PC-18X7)压缩置换成56位,输出前28位为C0输出后28位为D0。然后将C0D0进行16轮的循环左移及压缩置换PC-28X6),生成1648位的字密钥。

Ø  PC-18X7)压缩置换

假设密钥K64位)=133457799BBCDFF1,红色部分为奇偶校验位。

K64位)=00010011 00110100 01010111 01111001

                10011011 10111100 11011111 11110001

1密钥置换函数PC-18X7

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

 

        K使用PC-18X7)压缩置换,去掉8个校验位,从而得到K'。

K'(56位)=1111000 0110011 0010101  0101111

                       0101010 1011001  1001111  0001111

                            C0D0的分类

               1密钥置换输出的分法

C028位)=1111000 0110011 0010101  0101111

D028位)=0101010 1011001 1001111  0001111

                  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

C1D1分别为C0D0左移1位···C3D3分别为C2D2左移2位···最后得到C1D1~C16D16。例如:

C1=1110000  1100110 0101010  1011111

D1=1010101  0110011 0011110  0011110

C2=1100001  1001100 1010101  0111111

D2=0101010  1100110 0111100  0111101


   PC-28X6)压缩置换

每进行一轮循环左移,就是用PC-28X6)进行压缩置换(由56位压缩为48位)得到一个字密钥。在压缩过程中第9182225353843548位数据被丢掉。

 2压缩置换PC-28X6

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

 

置换过程如下图:

 


1.2加密

DES算法是对64位的数据块进行加密操作,不足64位要补位到64位长。明文M经过长度都为48比特的16个字密钥K来加密,最后生成长度为64比特的密文E

 1.2.1  IP初始置换

假设明文M=0123456789ABCDEF,即

M64位)=0000 0001 0010  0011  0100 0101  0110  0111

                     1000  1001 1010  1011  1100 1101  1110  1111

IP初始转换后为:

IP64位)=1100 1100  0000 0000  1100  1100 1111  1111

                     1111  0000 1010  1010  1111 0000  1010  1010

初始置换函数IP8X8

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

置换后的数据分为32位左半部分L032位的右半部分R0

L032位)=1100 1100 0000  0000  1100 1100  1111  1111

R032位)=1111 0000 1010  1010  1111 0000  1010  1010

1.2.2 加密数据

1)       Rn通过E盒从32位置换为48位;

2)       将置换结果与Kn进行异或;

3)       异或后的结果通过S盒转换为32位;

4)       经过S盒得到的32位再进行P盒置换;

5)       P盒置换后的结果与Ln进行异或,然后交换左右两部分,进行下一轮迭代;

6)       完成16轮迭代后,将得到的两部分数据合在一起,将L16R16交换,在经过一个IP逆置换即可得到64位的密文。

运算规则:

 

E盒置换

由于密钥K48位,而Rn32位,所以要将Rn置换为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

* S盒置换

将异或运算得到的48位结果数据分成86位的块,将每一块通过对应的一个S盒产生一个4位的输出,S盒接收6位的输入,经过置换输出4位的数据。(每块对应的S盒都不同)

6位中的B1B6记为XB2B3B4B5记为YX为行数,Y为列数,然后查出相应S盒的XY列所对应的整数,即为S盒的输出。

        DES中其他算法都是线性的,而S盒运算则是非线性的,S盒不易于分析,它提供了更好的安全性。所以S盒是算法的关键所在。

* P盒置换

产生一个32位的输出,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

* IP逆置换

R16L16运用一次IP逆置换(8X8),置换函数如下表:

40

8

48

15

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

 

1.3解密数据

解密过程和加密过程完全类似,只不过将16圈的字密钥序列顺序倒过来。