DES加密
Data Encryption Standard
秘钥长度为64位,其中8位为校验位(奇偶校验码)
2003年左右被暴力破解(穷举法)
被AES取代(Advanced Encyption Standard)
AES支持的秘钥长度包括128bit、192bit、256bit、384bit、512bit
DES加密这里拆成两个线来记录各自的动作(明文与秘钥)
DES的粗略步骤
1、明文
2、初始置换——得到L0和R0,并且加入K1进行一次运算
3、16轮迭代运算——不停地令L1=R0、R1=L0与f(R0,K1)迭代运算
4、逆初始置换
5、得到密文
DES加密过程详解
1、子秘钥获取--置换选择(一)
如图有一个PC-1表,K+的具体数值由PC-1表先横后列地数字一一对应填入。
例如K+的第一位1就是由原K的第51位填入(因为PC-1的第一个位置是51)
最后将K+分成左右两部分C0和D0(各28bit)
2、DES轮操作(秘钥)
得到的Li与Ri分别左移得到新的Li+1、Ri+1
同时将左移后的左右两部分Li、Ri进行PC2运算,得到Ki(第i轮的秘钥)
2.1子秘钥获取--循环左移
2.2子秘钥获取--置换选择(二)/压缩置换
根据pc-2表进行压缩置换操作,将56位的C1D1拼接压缩成48位作为Ki
具体操作和1里面一样
3、明文处理--初始置换
也是按表进行置换,之后拆成L0和R0两部分,接下来进行明文的轮操作
4、DES轮操作(明文)
其中F为函数操作,NOR为异或操作、Ri-1作为下一轮的Li使用,Li-1作为下一轮的Ri使用
其中Expansion...为扩展置换(32位->48位),Substition...位压缩置换,Permutation为P置换
4.1拓展置换
按照E TABLE表
第一位左从原32位(0)借过来,第四位右边从原5位(0)借过来,则原1111变成了011110
以此类推,则可将32位拓展成位48位
4.2压缩置换S
将之前拓展的48位进行亦或操作之后,再进行压缩置换成32位
对于011000,按照左上角图拆分为00和1100,即0、12
再按照0行12列查S1表,得到5,使用5的二进制代替原来的011000
即011000->0101 压缩完成
4.3 P置换
按照P表进行对应位置的重排置换,得到F函数的结果,比较简单就不放图了。
5、DES16轮后两步
5.1明文加密-左右交换
若
L16= 0100 0011 0100 0010 0011 0010 0011 0100
R16= 0000 1010 0101 1100 1101 1001 1001 0101
则交换后
R16L16=00001010 01001100 ...... 00110100
5.2逆置换
将R16L16再按照一个拟置换表换一下位置,则得到了最后的64位密文