DES加密算法
DES是一种对称加密算法(加密和解密使用相同的密钥)中的分组加密算法(与流密码相对应,流密码是逐字节进行加密,分组加密是将明文分成固定的字节块,并对每个字节块进行加密)
DES算法将明文以64位字节块为一组进行加密,密钥长为64位(bit,bit是二进制数字),但只有56位参与运算,其余8位为校验位
目录
算法步骤:
1.初始IP置换
2.密钥生成
3.16轮Feistel结构迭代
4.逆初始置换
第一步和第四步置换原理是相同的,但是使用的表不同
一、初始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 |
e.g.58表示将第58位放到第1位,50表示将第50位放到第2位,以此来进行置换
二、密钥生成
1、PC-1置换
将64位原始密钥通过PC-1置换表转换为56位,去除了每个字节的第8位(奇偶校验位)

2、循环左移
将56位的密钥分为左右两部分(C0和D0,都为28位),通过移位次数表得到C1和D1,再将C1和D1拼接到一起(左移:e.g.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轮函数包括四个步骤:1、E盒扩展
2、异或
3、S盒压缩
4、P盒置换
1、E盒扩展:
将32bit的R0扩展为48bit(为了与48bit密钥对应)
将32bit的数据分成8个4bit的数据,然后在每组4bit的第1位前和第4位后增加1位数据,第1位前增加的数据为原始数据前一组4bit的最后一位,第4位后增加的数据为原始数据后一组4bit的第一位
e.g.1101|0001|0011|0100|0010|0011|0011|1011
增加位数后1101就变成了111010,111010中的第一个1是1011的最后一位1(第一组4bit与最后一组4bit相串联),111010中的最后一个0是0001的第一位0
所以32bit的数据就变成了110101|000101|001101|010000|001000|001101|00111|110111这样的48bit数据
2、异或:
将扩展得到的48bit与密钥K1(48bit)进行异或
3、S盒压缩:
将异或得到的48bit结果压缩为32bit
将48bit数据分成8组6bit数据,然后把6位数据的第一位和最后一位拼在一起转换为十进制数,这个十进制数是代表要查的表的行数,剩下的中间的四位数同样转换为十进制数,这个十进制数是代表要查的表的列数,接着通过已知行和列在表中查到的数据再转换为二进制得到的四位结果就是压缩后的数据

e.g.111100
第一位和最后一位分别为1和0,拼到一起为10,将10转换为十进制数为2,行数就为第二行,剩下四位为1110,将1110转换为十进制数为14,列数就为第十四列,此时查表对应的数据就是5,将5转换为二进制为0101,则压缩后得到的数据为0101
4、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在右边并拼接到一起

四、逆初始置换
| 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 |
按照同样的方法将数据进行置换后就得到了密文
更多推荐



所有评论(0)