现在的位置: 首页 > 综合 > 正文

DES算法的介绍和实现(上)

2013年11月15日 ⁄ 综合 ⁄ 共 3328字 ⁄ 字号 评论关闭

DES算法的介绍和实现(上)
作者:
西安 吴真

下载本文配套源代码(DES算法文件加密工具)

一.DES算法介绍

DES( Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法。虽然56位密钥的DES算法已经风光不在,而且常有用Des加密的明文被破译的报道,但是了解一下昔日美国的标准加密算法总是有益的,而且目前DES算法得到了广泛的应用,在某些场合,她仍然发挥着余热^_^.

1.1 密钥生成

1.1.1 取得密钥

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

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

1.1.2 等分密钥

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

表2.

65 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 密钥移位

表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.

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.

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 数据压缩

表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

抱歉!评论已关闭.