DES加密流程图如下:

输入明文为64bit数据,经过IP初始置换分为左右两组32bit数据L0和R0,最后经过16轮加密运算,L16与R16(注意最后一轮没有进行左右互换)经过逆初始置换IP-1得到密文输出。

其中IP和IP-1是公开固定的

DES加密长度 des加密算法流程图_数据


下面分别解释

IP–初始置换,上半部分4个字节32bit数据组成L0,下半部分组成R0,

表中数字表示初始明文数据的下标,即第一个bit是原明文的第58个bit

DES加密长度 des加密算法流程图_IP_02


IP-1—初始逆变换,也叫末置换

DES加密长度 des加密算法流程图_DES加密长度_03


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

DES加密长度 des加密算法流程图_十进制数_04


接着是f函数中的压缩运算S:

DES中的S盒压缩表是公开的,S的输入6bit为z0z1z2z3z4z5则z0z5的十进制数为S盒中的行数m,z1z2z3z4的十进制数为S盒中的列数n,这样一个6bit数据对应一个S盒中的数(范围是0~15)转换为4位2进制数。达到了6bit数据变为4bit数据的压缩目的。

DES加密长度 des加密算法流程图_DES加密长度_05


置换运算P

S盒运算后输出32bit字,下标为1~32,P变换是将这些bit数据进行重新排位,变换后的数据顺序如下:

DES加密长度 des加密算法流程图_数据_06


最后是密钥扩展部分,流程图如下,这个图中有一处错误,置换选择2的数据来源是C和D,不止C一个:

DES加密长度 des加密算法流程图_数据_07


首先输入K密钥为64位,每8bit一个奇偶校验位去掉后(8,16,24,。。。64去掉)得到56bit有效初始密钥;置换选择1:PC-1(k)=(C0,D0),下图数字是对应的bit位下标

DES加密长度 des加密算法流程图_DES加密长度_08


循环左移对应的移位数也是公开的,如下表:

DES加密长度 des加密算法流程图_十进制数_09


接着是置换选择2:PC-2(h)=(a1,b1),具体变换的对应数据下标如下:

DES加密长度 des加密算法流程图_数据_10