DES加密算法详解
DES加密算法详解
DES(Data Encryption Standard)是一种对称加密算法,加密和解密使用相同的密钥。与流密码逐字节加密的方式不同,DES采用分组加密方式,将明文分成固定的字节块进行加密。
DES算法将明文以64位字节块为一组进行加密,密钥长度为64位(bit),但只有56位参与运算,其余8位为校验位。
算法步骤
- 初始IP置换
- 密钥生成
- 16轮Feistel结构迭代
- 逆初始置换
第一步和第四步的置换原理相同,但使用的表不同。
一、初始IP置换
初始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
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
例如,58表示将第58位放到第1位,50表示将第50位放到第2位,以此类推进行置换。
二、密钥生成
1. PC-1置换
将64位原始密钥通过PC-1置换表转换为56位,去除每个字节的第8位(奇偶校验位)。
2. 循环左移
将56位的密钥分为左右两部分(C0和D0,都为28位),通过移位次数表得到C1和D1,再将C1和D1拼接到一起。例如,110011100左移一位后得到100111000,左移两位后得到011100000。
3. PC-2置换
将上一步得到的56位数据通过PC-2表转换为48位密钥K1。
三、16轮Feistel结构迭代
置换完后将得到的新的明文分为两部分L0和R0,都为32bit。第一轮得到L1和R1,L1=R0(直接把R0的值赋值给L1),R1=L0^F(R0,K1)(R1的值为F轮函数得到的值与L0进行异或运算得到的结果)。
F轮函数包括四个步骤:
- E盒扩展
- 异或
- S盒压缩
- P盒置换
1. E盒扩展
将32bit的R0扩展为48bit(为了与48bit密钥对应)。将32bit的数据分成8个4bit的数据,然后在每组4bit的第1位前和第4位后增加1位数据,第1位前增加的数据为原始数据前一组4bit的最后一位,第4位后增加的数据为原始数据后一组4bit的第一位。
例如:
1101|0001|0011|0100|0010|0011|0011|1011
增加位数后变为:
110101|000101|001101|010000|001000|001101|00111|110111
2. 异或
将扩展得到的48bit与密钥K1(48bit)进行异或。
3. S盒压缩
将异或得到的48bit结果压缩为32bit。将48bit数据分成8组6bit数据,然后把6位数据的第一位和最后一位拼在一起转换为十进制数,这个十进制数是代表要查的表的行数,剩下的中间的四位数同样转换为十进制数,这个十进制数是代表要查的表的列数,接着通过已知行和列在表中查到的数据再转换为二进制得到的四位结果就是压缩后的数据。
例如:
111100
第一位和最后一位分别为1和0,拼到一起为10,将10转换为十进制数为2,行数就为第二行,剩下四位为1110,将1110转换为十进制数为14,列数就为第十四列,此时查表对应的数据就是5,将5转换为二进制为0101,则压缩后得到的数据为0101。
4. P盒置换
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
将上一步得到的32bit数据根据P盒置换表进行置换。16代表将第十六位放到第一位,7代表把第七位放到第二位,以此类推,得到的新32bit数据就是F轮函数后得到的值。这个新值与L0进行异或得到的数据就赋值到了R1上。
这就是一轮运算过程,一共有16轮运算,运算后就得到了L16和R16,R16在左边L16在右边并拼接到一起。
四、逆初始置换
逆IP置换表如下:
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
按照同样的方法将数据进行置换后就得到了密文。