DES

DES是一种使用56位密钥对64位长分组进行加密的密码

DES对明文中每个分组的加密过程都包含16轮,每轮操作完全相同,每一轮会使用不同的子密钥,所有子密钥都是从主密钥推导而来的。

DES是Feistel密码,优势是加解密过程几乎完全相同。DES解密仅需要密钥编排。

将64位的明文进行初始置换

此明文会被分成L0和R0两部分,右半部分R0被送入f函数,函数结果与左半部分L0进行异或运算,最后左右两部分交换进入下一轮

经过16次迭代,左右部分再次交换,然后进行 逆初始置换。

初始置换改变输入的连线方式实现 assign......

crp是f函数 输入是右半部分中间值和子密钥 输出函数值:首先将输入的32bit扩展为48位,也是通过连线实现,有些原来位上的值被重复填补到新的位置上;然后与48bit的密钥按位异或,以上过程在E盒中进行。接下来将8个6位长的分组送入不同的sbox中,每个s盒有64项,以查找表的形式实现,每个s盒有6位的输入和4位的输出。经过s盒运算产生了32bit的中间值,此时再经过一次置换,连线实现,注意这个置换与初始置换和逆初始置换是不一样的。

 

对于密钥编排,从原始的56位密钥中得到16个轮密钥ki,每个轮密钥ki都是48bit。

将56位密钥分成C0、D0两部分,长度均为28bit的左右两部分将周期性的向左移动1位或者2位,移位具体位数取决于轮数,第1、2、9、16轮,左右两部分向左移动1位其他轮向左移动2位。为了得到48bit的子密钥,左右两部分需要再次进行按位置换。在实现中使用了多路选择器和查找变来实现。

上一篇:3DES的简要原理和参考实现


下一篇:DES代码C++ 工具 DEVC++