DES加密算法总结
2006-04-11 李亚楠
数据加密标准DES(Data Encryption Standard)为IBM公司设计的数据加密方案,与1971年1月被美国政府采用为非机密数据的数据加密标准。它具有以下特点:
1、 具有相当高的复杂性,使得破译的开销超过可能获得利益,同时又要便于理解和掌握。
2、 DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础。
3、 实现经济,运行有效,并使用于多种不同的应用
DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥,Data也为8个字节64位,是要被加密或解密的数据,Mode为DES的工作方式,有两种:加密或者解密。
DES算法是这样工作的,若Mode为加密,则用Key去把数据Data进行加密,生成的Data的密码形式(64位)作为DES的输出;若Mode为解密,则用Key去把密码形式的数据Data解密,还原位Data的明码形式(64位)作为DES的输出结果,在通信网络的两端,双方约定一致的Key,在通信的端点用Key对核心数据进行DES加密,然后以密码的形式在公共通信网中传输到通信网络的终点,用同样的Key对密码数据进行解密。这样,便满足核心数据在公共通信网中传输的安全性和可靠性。
通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性。
DES算法把64位的明文输入块变为64位的密文输出块,它使用的密钥也是64位,其算法分为3个步骤:
1.初始置换
其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长3 2位,其置换规则为将输入的第58位换到第一位,第50位换到第2位等等依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3……。D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7。
初始置换规则见下表:
58,50,12,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,
2、16次迭代运算
① 变换密钥:
取得56位密钥,每个第8位为奇偶校验,舍弃奇偶校验位变成56位的密钥,按照如下置换规则置换:
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
将变换后的密钥分成两个部分,开始的28位成为C[0],后面的28位成为D[0]。
② 生成16个密钥
初始化 I=1
对C[I-1]和D[I-1]进行循环左移,分别得到C[I]和D[I],循环左移的位数取决于I的值,如果I=1、2.、9、16,循环左移的位数等于1,否则循环左移的位数等于2。这些经过移位的值将作为下一个循环的输入。这样得到C[1]—C[16]和D[1]—D[16]。
将C[I]D[I]作为一个整体按下面置换规则进行置换,得到48位的K[I]
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
循环计算,直到K[1]—K[16]被计算出来。
③ 迭代计算:
计算公式:I=1
L[I] = R[I-1]
R[I] = L[I-1]⊕f(R[I-1],K[I])
其中f(R[I-1],K[I])作如下解释:
●标志:将32位的R[I-1]按下表(E)扩展为48位的E[I-1]
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
●异或E[I-1]和K[I],即E[I-1] XOR K[I]
●将异或后的结果分为8个6位长的部分,第1位到第6位称为B[1],第7位到第12位称为B[2],依此类推,第43位到第48位称为B[8]。
●按照S表置换B[J],初始J=1。在S表中所有的数都当作4位处理
●将B[J]的第1位和第6位组合成一个2位数M,M作为S[J]表中的行号
●将B[J]中的第2至5位组合成一个4位数N,N代表S[J]表的列号
●用S[J][M][N]来取代B[J]
S[J]置换表如下:
S[1]表:
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
S[2]表:
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S[3]表:
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S[4]表:
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S[5]表:
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S[6]表:
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S[7]表:
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S[8]表:
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
循环执行,直到B[8]被替代完成,将B[1]到B[8]组合,按下表变换,得到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
P就是f(R[I-1],K[I])的结果,R[I]=P XOR L[I-1],循环计算
2.逆置换
经过16次迭代运算,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出,置换规则:
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加密运算框图:
附:函数f 的计算过程: