DES是一种分组加密算法,其每个明文分组的长度分为64位,密钥长度为56位,输出的密文长度为64位。(密钥其实是共有64位,其中有8位是奇偶校验位)
DES的大致步骤是:
1、对输入的64位明文进行初始置换
2、在密钥控制下进行16轮迭代(Feistel)
3、交换明文左右32比特
4、初始逆置换
输出64比特的密文数据
其中16轮次迭代使用的子密钥的产生流程为:
1.输入64位的密钥;2.对密钥进行密钥置换 1得到56位的输出;3.将所得输出分为28位的两等份,分别对两个分组进行循环左移;4.将第三部所获得的两个分组组合即为下一轮次的密钥输入,再对这这两个分组进行压缩置换所得的48位输出就作为当前循环轮次的子密钥。
如此循环16次
具体流程:
1、首先对输入的64位明文进行初始置换IP:置换表为
其含义是,按照置换表中的数值表示的位置的数值放在指定位置,比如第一个数是58,意为把58位的数放在第一位。
2、在密钥控制下进行16轮迭代(Feistel)
迭代采用的是Feistel加密算法,将64位的输入分为32位的两等份,其中
对应的轮函数处理是:
1.首先对RE部分进行扩展置换(或E盒置换),使得其被扩展成48位,E盒置换的置换表为
2.再将所得的对应48位子密钥和扩展置换所得的48位输出进行异或。
3.将两者异或所得的输出进行S-盒代替,S-盒代替原理:
通过S-盒代替将48位的输入变回了32位的输出,其实际使用就是将48位按6*8分为了8个组,用4位去替代6位,得到4*8=32的输出。对这输入的八个组分别用S盒1~8进行代替。【注意:整个过程中只有S-盒是代替其他的都是置换。】
4.最后再对得到的32位输出进行P-盒置换
3、再将第16轮次互换完的数据左右进行互换,也就相当于Feistel加密运行到第16轮后不进行左右互换。
4、对所得输出进行一个初始逆置换即得到所求的密文