DES加密原理
DES算法
DES算法简介
- DES是一种明文分组为64比特,有效密钥56比特,输出密文64比特的,具有16轮迭代的Feistel密码算法。
- DES由初始置换,16轮迭代,初始逆置换组成。
算法加密流程描述
- 输入64位明文,进行初始置换IP
- 将明文分成左右两部分,为L0,R0,各32位
- 在密钥的控制下,进行16次运算
- 运算结束将左右交换,连接在一起再进行逆置换
- 最后输出64位密文
算法流程
初始置换
- 将输入的明文按照上表进行置换
- 例如,输出块的第1位对应输入块的第58位,第2位对应第50位,依次类推
- 则输入块是D1~D64,输出块是D58,D50,D42,……,D15,D7;
- 然后将输出块左右分成L0和R0
加密16轮迭代
密钥置换
- 密钥共有64位,16轮迭代后为48为子密钥
- 将密钥的奇偶位忽略不计(就是每个字节的第八位),64位变为56位,根本选择置换PC-1将56位的密钥分成左C0(28位),右D0(28位),表中第8、16、24、…、64位被忽略
- 根据轮数,将Cn,Dn进行左移
- 比如C0和D0进行第一次左移,根据表格,是左移一位,得到以下
1
2
3
4
5
6
7
8
9
10C1
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,57
D1
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,63
- 然后C1和D1合并,经过置换选择表2(PC-2),生成48位的子密钥,表格如下
- 此后每次都进行拆分,然后左移,再合并,然后经过PC-2生成子密钥K
- 依次类推,得到K1~K16
扩展置换E
- 根据以上表格,将32位扩展为48位
- 中间为原本的32位,两边位扩展的位,总共48位
S-盒代替
- Rn经过扩展,为48位,与48位的Kn进行异或运算,得到48位输出块,为8个6bit的串,分别为B1~B8
- 根据上表,对应S1~S8,进行代替操作,这一步是将6bit的串,前后各一位对应纵列,中间四位对应行,例如110010以S1为例,在行当中找到1001对应的十六进制9,在列当中找到10对应的十六进制2,对应十六进制12,则输出为1100
P-盒置换
- S-盒代替之后,每盒有4位,共八盒,就是32位,作为P-盒的输入块
- 根据上表,对Rn进行置换,得到的串与左部分Ln进行异或运算,得到的串赋值给R(n+1)
- R(n)直接赋值给L(n+1)
- 然后再进行下一次迭代
逆置换
- 以上的迭代算法成为函数f
- 进行完16次迭代,得到L16和R16,然后将LR调换,最后合并为64位的输出块,进行逆置换
- 逆置换根据上表,对应的位进行置换,逆置换是初始置换的逆运算,就是说初始置换输出的第1位是原始输入的第58位,第2位是第50位,而逆置换输出的第58位是输入的第1位,输出的第50位是输入的第2位
- 最后得到的64位输出块,则是DES加密的最终密文
评论