DES加密流程图如下:
输入明文为64bit数据,经过IP初始置换分为左右两组32bit数据L0和R0,最后经过16轮加密运算,L16与R16(注意最后一轮没有进行左右互换)经过逆初始置换IP-1得到密文输出。
其中IP和IP-1是公开固定的
下面分别解释
IP–初始置换,上半部分4个字节32bit数据组成L0,下半部分组成R0,
表中数字表示初始明文数据的下标,即第一个bit是原明文的第58个bit
IP-1—初始逆变换,也叫末置换
f函数:下图记为f(R,k),k是对应轮的子密钥,其中R是32bit数据,k是48bit的轮密钥E是选择扩展运算,作用是使32bit的R扩展为48bit,
扩展方法:E输出数据的比特位下标是原比特位下标s mod 4 ==1和4的各比特重复一次
原数据x=(x1.。。。x32),扩展后(32,1,2,3,**4,5,4,5,**6,7,**8,9,8,9,**10,11,。。。28,29,28,29,30,31,32,1)
接着是f函数中的压缩运算S:
DES中的S盒压缩表是公开的,S的输入6bit为z0z1z2z3z4z5则z0z5的十进制数为S盒中的行数m,z1z2z3z4的十进制数为S盒中的列数n,这样一个6bit数据对应一个S盒中的数(范围是0~15)转换为4位2进制数。达到了6bit数据变为4bit数据的压缩目的。
置换运算P
S盒运算后输出32bit字,下标为1~32,P变换是将这些bit数据进行重新排位,变换后的数据顺序如下:
最后是密钥扩展部分,流程图如下,这个图中有一处错误,置换选择2的数据来源是C和D,不止C一个:
首先输入K密钥为64位,每8bit一个奇偶校验位去掉后(8,16,24,。。。64去掉)得到56bit有效初始密钥;置换选择1:PC-1(k)=(C0,D0),下图数字是对应的bit位下标
循环左移对应的移位数也是公开的,如下表:
接着是置换选择2:PC-2(h)=(a1,b1),具体变换的对应数据下标如下: