DES 算法1

1.1 密钥生成<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1.1.1 取得密钥

从用户处取得一个64 位(本文如未特指,均指二进制位))长的密码key ,

去除64 位密码中作为奇偶校验位的第8、16、24、32、40、48、56、64 位,剩下的56 位作为

有效输入密钥.

1.1.2 等分密钥

表1. KeyLeft[28]

  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 50 44 36

表2. KeyRight[28]

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

把在1.1.1 步中生成的56 位输入密钥分成均等的A,B 两部分,每部分为28 位,参照表1 和表2

把输入密钥的位值填入相应的位置. 按照表1 所示A 的第一位为输入的64 位密钥的第57 位,

A 的第2 位为64 位密钥的第49 位,...,依此类推,A 的最后一位最后一位是64 位密钥的第

36 位。

1.1.3 密钥移位

Lefttable[16]=[1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1]

表3. i 1 2 3 4 5 6 7 8

ǿ 1 1 2 2 2 2 2 2

i 9 10 11 12 13 14 15 16

ǿ 1 2 2 2 2 2 2 1

DES 算法的密钥是经过16 次迭代得到一组密钥的,把在1.1.2 步中生成的A,B 视为迭代的起始

密钥,表3 显示在第i 次迭代时密钥循环左移的位数. 比如在第1 次迭代时密钥循环左移1 位,

第3 次迭代时密钥循环左移2 位.

第9 次迭代时密钥循环左移1 位,第14 次迭代时密钥循环左移2 位.

第一次迭代:

A(1) = ǿ(1) A

B(1) = ǿ(1) B

第i 次迭代:

A(i) = ǿ(i) A(i-1)

B(i) = ǿ(i) B(i-1)

1.1.4 密钥的选取

表4. KeyChoose[48]

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.1.3 步中第i 次迭代生成的两个28 位长的密钥为

把合并

按照表4 所示k 的第一位为56 位密钥的第14 位,k 的第2 位为56 位密钥的第17 位,...,

依此类推,k 的最后一位最后一位是56 位密钥的第32 位。 生成与进行第i 次迭代加密的数

据进行按位异或的48 位使用密钥:

1.1.5 迭代

DES 算法密钥生成需要进行16 次迭代,在完成16 次迭代前,循环执行1.1.3-1.1.4 步.

最终形成16 套加密密钥:key[0] , key[1] , key[2] ,…. key[14] , key[15] .

1. 2 数据的加密操作

1.2.1 取得数据

把明文数据分成64 位的数据块,不够64 位的数据块以适当的方式补足。

1.2.2 初始换位

表5. Pc1[64]

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

按照表5 所示把输入的64 位数据的原第58 位换到第一位,原第50 位换到第二位,...,依此

类推,最后的得到新的64 位数据.

OldData newData

1.2.3 数据扩展

表6.

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

第一次迭代以1.2.2 步中生成的newData 作为输入数据,第i (i > 1)次迭代以第i-1 次的64

位输出数据为输入数据,把64 位数据按位置等分成左右两部分:

保持left 不变,根据表6 把right 由32 位扩展成48 位

把扩展后的48 位right 与第i 次迭代生成的48 位加密密钥进行按位异或操作 形成一个新的

48 位的right.

1.2.4 数据压缩   SPi[8][64]

表7.1 1 2 3 4 5 6 7 8

1-8 0xe 0x0 0x4 0xf 0xd 0x7 0x1 0x4

9-16 0x2 0xe 0xf 0x2 0xb 0xd 0xb 0xe

17-24 0x3 0xa 0xa 0x6 0x6 0xc 0xc 0xb

25-32 0x5 0x9 0x9 0x5 0x0 0x3 0x7 0x8

33-40 0x4 0xf 0x1 0xc 0xe 0x8 0x8 0x2

41-48 0xd 0x4 0x6 0x9 0x2 0x1 0xb 0x7

49-56 0xf 0x5 0xc 0xb 0x9 0x3 0x7 0xe

57-64 0x3 0xa 0xa 0x0 0x5 0x6 0x0 0xd

表7.2 1 2 3 4 5 6 7 8

1-8 0xf 0x3 0x1 0xd 0x8 0x4 0xe 0x7

9-16 0x6 0xf 0xb 0x2 0x3 0x8 0x4 0xf

17-24 0x9 0xc 0x7 0x0 0x2 0x1 0xd 0xa

25-32 0xc 0x6 0x0 0x9 0x5 0xb 0xa 0x5

33-40 0x0 0xd 0xe 0x8 0x7 0xa 0xb 0x1

41-48 0xa 0x3 0x4 0xf 0xd 0x4 0x1 0x2

49-56 0x5 0xb 0x8 0x6 0xc 0x7 0x6 0xc

57-64 0x9 0x0 0x3 0x5 0x2 0xe 0xf 0x9

表7.3 1 2 3 4 5 6 7 8

1-8 0xa 0xd 0x0 0x7 0x9 0x0 0xe 0x9

9-16 0x6 0x3 0x3 0x4 0xf 0x6 0x5 0xa

17-24 0x1 0x2 0xd 0x8 0xc 0x5 0x7 0xe

25-32 0xb 0xc 0x4 0xb 0x2 0xf 0x8 0x1

33-40 0xd 0x1 0x6 0xa 0x4 0xd 0x9 0x0

41-48 0x8 0x6 0xf 0x9 0x3 0x8 0x0 0x7

49-56 0xb 0x4 0x1 0xf 0x2 0xe 0xc 0x3

57-64 0x5 0xb 0xa 0x5 0xe 0x2 0x7 0xc

表7.4 1 2 3 4 5 6 7 8

1-8 0x7 0xd 0xd 0x8 0xe 0xb 0x3 0x5

9-16 0x0 0x6 0x6 0xf 0x9 0x0 0xa 0x3

17-24 0x1 0x4 0x2 0x7 0x8 0x2 0x5 0xc

25-32 0xb 0x1 0xc 0xa 0x4 0xe 0xf 0x9

33-40 0xa 0x3 0x6 0xf 0x9 0x0 0x0 0x6

41-48 0xc 0xa 0xb 0xa 0x7 0xd 0xd 0x8

49-56 0xf 0x9 0x1 0x4 0x3 0x5 0xe 0xb

57-64 0x5 0xc 0x2 0x7 0x8 0x2 0x4 0xe

表7.5 1 2 3 4 5 6 7 8

1-8 0x2 0xe 0xc 0xb 0x4 0x2 0x1 0xc

9-16 0x7 0x4 0xa 0x7 0xb 0xd 0x6 0x1

17-24 0x8 0x5 0x5 0x0 0x3 0xf 0xf 0xa

25-32 0xd 0x3 0x0 0x9 0xe 0x8 0x9 0x6

33-40 0x4 0xb 0x2 0x8 0x1 0xc 0xb 0x7

41-48 0xa 0x1 0xd 0xe 0x7 0x2 0x8 0xd

49-56 0xf 0x6 0x9 0xf 0xc 0x0 0x5 0x9

57-64 0x6 0xa 0x3 0x4 0x0 0x5 0xe 0x3

表7.6 1 2 3 4 5 6 7 8

1-8 0xc 0xa 0x1 0xf 0xa 0x4 0xf 0x2

9-16 0x9 0x7 0x2 0xc 0x6 0x9 0x8 0x5

17-24 0x0 0x6 0xd 0x1 0x3 0xd 0x4 0xe

25-32 0xe 0x0 0x7 0xb 0x5 0x3 0xb 0x8

33-40 0x9 0x4 0xe 0x3 0xf 0x2 0x5 0xc

41-48 0x2 0x9 0x8 0x5 0xc 0xf 0x3 0xa

49-56 0x7 0xb 0x0 0xe 0x4 0x1 0xa 0x7

57-64 0x1 0x6 0xd 0x0 0xb 0x8 0x6 0xd

表7.7 1 2 3 4 5 6 7 8

1-8 0x4 0xd 0xb 0x0 0x2 0xb 0xe 0x7

9-16 0xf 0x4 0x0 0x9 0x8 0x1 0xd 0xa

17-24 0x3 0xe 0xc 0x3 0x9 0x5 0x7 0xc

25-32 0x5 0x2 0xa 0xf 0x6 0x8 0x1 0x6

33-40 0x1 0x6 0x4 0xb 0xb 0xd 0xd 0x8

41-48 0xc 0x1 0x3 0x4 0x7 0xa 0xe 0x7

49-56 0xa 0x9 0xf 0x5 0x6 0x0 0x8 0xf

57-64 0x0 0xe 0x5 0x2 0x9 0x3 0x2 0xc

表7.8 1 2 3 4 5 6 7 8

1-8 0xd 0x1 0x2 0xf 0x8 0xd 0x4 0x8

9-16 0x6 0xa 0xf 0x3 0xb 0x7 0x1 0x4

17-24 0xa 0xc 0x9 0x5 0x3 0x6 0xe 0xb

25-32 0x5 0x0 0x0 0xe 0xc 0x9 0x7 0x2

33-40 0x7 0x2 0xb 0x1 0x4 0xe 0x1 0x7

41-48 0x9 0x4 0xc 0xa 0xe 0x8 0x2 0xd