DES加密算法详解(ECB)
DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。 明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。
des算法的大致流程是将64位的明文进行初始置换然后将置换后的明文进行16次的f函数迭代运算,最后再将得到的64位密文进行逆初始置换,这样子便得到了经过des算法加密后的64位密文,其大致流程图如下:
1.初始置换
初始置换就是将64位的明文按照规定的顺序进行打乱。
如这个矩阵所示,第一位是58,即代表打乱后的明文的第一位是打乱之前的明文的第58位,以此类推。
2.f函数的构成
f函数比较复杂,也是des算法的核心。f函数主要由分割,扩展置换,轮密钥,s盒变换,p盒变换,异或操作构成。
2.1分割
这个很好理解,即将输入f函数的64位数据分为左32位和右32位两部分。
2.2扩展置换和与轮密钥异或
扩展置换的作用是将右32数据位经过处理得到48位数据。扩展置换的流程如下:
先将要进行扩展置换的32位数据分为8组,每组4位数据。然后在每一组的头部添加上一组的尾部数据,每一组的尾部添加下一组的头部数据。拿第一组数据举个例子,第一组数据的头部添加上一组的尾部数据,也就是第八组最后一位第32位,第一组的尾部添加下一组的头部数据,也就是第二组头部数据第5位。注意,添加数据所使用的数据都是未扩展的即4位的。这样子就使得32位的数据变成了48位。如图所示:
处理之后的数据再和48位轮密钥进行异或,便完成了扩展置换和与轮密钥异或的操作。
异或运算表:
2.3 s盒变换
s盒变换是指将输入的48位数据分为8组,每组进行不同的s盒压缩运算,从而将每组6位数据压缩成每组4位数据最终得到32位数据。每组数据的运算都不一样。拿第一组数据s1盒运算举个例子:假设第一组数据为101101,取数据的头部盒尾部构成c,剩下的数据则构成d,c所对应的10进制数则为行,d所对应的10进制数则为列,则压缩后的数据是s1表的c行d列的数据所对应的二进制数据,c为11,对应的10进制为3,d为0110对应的0进制为6(注意,表的首行和首列都是以0开始),查表知第三行第六列的数据为1,对应的二进制位0001,所以经过s1盒运算后的数据是0001。
2.4p盒变换
和初始置换差不多,p盒置换是将经过s盒置换的32位顺序按照p盒表进行打乱,这里就不多说了。
p盒:
3 f函数的运算流程
f函数先将要进行运算的64位数据分为左32位和右32位两部分。右32位直接作为下一轮运算的左32位,然后右32位先进行扩展置换得到48位数据,然后再将48位数据与轮密钥ki进行异或操作,紧接着将得到的48位数据进行s盒运算,得到32位数据,然后将32位数据进行p盒运算得到新的32位数据,再将新的32位数据与左32位数据进行异或操作最终得到32位数据作为下一轮运算的右32位数据,这样子反复运算16次,便完成了f函数的16次迭代运算。其大致流程图如下:
4 轮密钥的产生
由于需要进行16次f函数迭代运算,所以则需要需要特定的算法来产生16个轮密钥。
产生轮密钥的过程和f函数类似,也是经过一系列的替换,分割,然后得到每一轮的轮密钥。大致流程如下:
密钥是由64位数据构成,其中的第8,16,24,32,40,48,56,64位奇偶校验位,所以实际的密钥只有56位。
首先,将去除掉奇偶校验位的56位密钥进行pc-1替换,然后将替换后的数据,分为两部分c1和d1,每一个部分是28位数据。然后将c1和d1进行左循环操作得到c2和d2(循环与i有关),c2和d2接着再进行pc-2操作,于是就得到了48比特的轮密钥ki,下一轮的c1和d1就是上一轮的c2和d2,这样子就产生了16个轮密钥。
pc-1运算:
将去除奇偶校验位的56位数据按表打乱。
pc2-计算:
和pc-1计算类似。
左移循环:
根据轮数来确定左移循环位数。
5 逆置换
就是初始置换的逆过程:
经过上述步骤就得到了des加密的64位密文
6 解密
解密很简单,就是将16个轮密钥逆顺序使用,然后通过一样的算法,就得到了明文。
代码实现:(没写完,后面补上)