DES算法
- 分组密码
- Feistel结构
- Des算法
- 初始IP置换
- 子密钥生成
- F函数
- 逆初始置换
分组密码
分组密码将明文M划分为一系列的明文块Mi,每一块Mi包含若干位或字符,每一块用同一个密钥K加密。DES算法就是把明文切成以64位为单位的一个个明文块,每个明文块都用同一个秘钥K加密(然后K在生成子秘钥一一对应DES中的16轮循环)
Feistel结构
令F 为轮函数;令K1,K2,……,Kn 分别为第1,2,……,n 轮的子密钥。那么基本构造过程如下:
(1)将明文信息均分为两块:(L0,R0);
(2)在每一轮中,进行如下运算(i 为当前轮数):
Li+1 = Ri;
Ri+1 = Li ⊕F (Ri,Ki)。(其中⊕为异或操作)
所得的结果即为:(Ri+1,Li+1)。
Des算法
一共16次大循环,每一轮都用对应生成的子密钥加密,所有的置换表中记录的都为数据的旧位置,数据的新位置则按置换表顺序排列。
初始IP置换
将64位明文(M),根据IP置换表将明文中的字母重新排列,再分为左(L0)右(R0)各32位。初始IP置换只在最开始进行。
子密钥生成
初始密钥共64位,但加入运算的只有56位(可用密钥) ,还有8位为奇偶校验位( 第8、16、24、32、40、48、56、64位为校验位)。
先根据PC-1置换(56位),将初始密钥K0(56位)化为左右两部分C0、D0,再根据LS表分别循环左移得到C1、D1。最后用C1、D1经过PC-2置换(48位)压缩为48位子密钥K1。C1和D1合并后为下一轮对应的初始密钥。
F函数
- 扩展E置换
先拿出R0(32位),通过扩展E置换得到E(R0)(48位),再用E(R0)和K1相异或得到S盒的输入数据E(R0⊕K1)(48位)。 - S盒压缩置换
S盒一共有8个,每个都是4行16列。先将输入数据E(R0⊕K1) 分为8份一份6位,将这8份发送给对应的S盒;在每个S盒子要处理的6位中,取第1位和第6位组成“行”,中间4位组成“列”。(两位2进制数能表示0 ~ 3,四位2进制数能表示0 ~ 15,对应S盒的4行16列),最后取出S盒中对应行列的数字并转为四位2进制数,合并8个S盒输出的32位数据,记为SE(R0⊕K)(32位)。 - P盒置换
将S盒置换结果SE(R0⊕K) 经过P盒置换得到PSE(R0⊕K1)(32位)。
最后输出结果为L1 = R0,R1 = L0 ⊕ PSE(R0⊕K1)
逆初始置换
子密钥生成和F函数一共循环16轮,得到左(L16)右(R16),再经过逆IP置换表置换并合并得到密文C。