1.首先,要明确几个简单的概念

  • key:8个字节共64位的工作密钥,必须是8字节。但是实际用到的是56字节,剩下的8字节用于校验
  • data:8个字节共64位的需要被加密或被解密的数据

2. 流程图

des 加密 js des加密解密流程图_数据


下图为16轮重复运算的具体过程

des 加密 js des加密解密流程图_算法_02

3.算法的流程简单分析

1)IP置换–处理data

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

然后就这个8*8的表格就被分成了左右两个,即L0R0

des 加密 js des加密解密流程图_数据_03

2)秘钥置换–处理key
  • 要把64为秘钥改成56位,删掉8,16,24,32,40,48,56和64这8位,见下表

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

  • 将剩下的56位分成两组,每组28位,分别为C0和D0。划分结果如下
  • 在DES的每一轮中(要进行16轮,后面会说),从56位密钥产生出不同的48位子密钥,确定这些子密钥的方式如下为:

根据轮数,这两部分分别循环左移1位或2位。每轮移动的位数如下表:

轮数

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

为了方便理解,简单解释一下怎么左移,第一轮,位数为1,则:

C0:

des 加密 js des加密解密流程图_十进制_04


现在C1:

49-41-33-25-17-------------57

就是整体向前移动一位,后面D0也是一样的道理。

  • 最终从56位得到48位,表中没有9,18,22,25,35,38,43和54这8位

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)扩展置换

目的是将有半段R0由32位拓展为48位

des 加密 js des加密解密流程图_算法_05


如上图所示,第一列和第六列均为拓展内容,拓展的规则我已经标注好,这样便于理解。

4)与秘钥异或操作

经过上面的操作,秘钥长度已经从64位控制位48位,与R0长度一致,进行异或操作,得出结果。

5)进行S盒变换

得到的异或后的48位后,将其分成8组,放入8个S盒中。每个S盒有6位输入4位输出。最终输出为32位
每个S盒的映射表都是固定的,为了方便,我这列出其中一个盒子的映射表

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,11对应十进制为3,对应于S盒8的第3行;第2位到第5位为1001,1001对应十进制为9,对应于S盒8的第9列。最终结果为12 (都是从下标为0开始计算的)

des 加密 js des加密解密流程图_十进制_06

6)P盒变换

比较简单,将32位对应映射表进行映射即可(表示确定好的,不要纠结这个)

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

7)结果与L0异或
8)重复 2)-7)步骤 ,总共16次
9)将L15和R15组合成64位
10)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

最后得出密文!!