DES加解密算法实现详解

一:实验原理:

1,将64位明文进行初始置换,置换规则是:把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长3 2位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7,置换表如下:

DES加解密算法实现详解_第1张图片


2,密钥产生

   将输入的64位密钥各位分别标记为1到64,忽略每行的第八位(因为每个第8 位都用作奇偶校验),具体过程参照置换选择1

  DES加解密算法实现详解_第2张图片

(置换选择1)

   将所得的56位密钥分为2个28位数据 和 ,然后在每轮迭代中, 和

分别循环左移(或旋转)一位或两位,具体左移位数参见下表

DES加解密算法实现详解_第3张图片

移位后的值作为下一轮的输入,也是置换选择2的输入,经过置换选择2后的输出是一个48位的数,置换选择2表如下:

DES加解密算法实现详解_第4张图片

3,将初始置换后的左右各32位数据进行16次迭代,每次的迭代公式为:

Li=Ri-1;

Ri=Li-1⊕F(Ri-1,ki)

其中Ki是指轮密钥,就是由步骤2产生的48位的密钥, 是32位,但是 是48位,所以要先将 扩展成48位,扩展置换表如下所示:

DES加解密算法实现详解_第5张图片


  将扩展后的 和 进行异或,得到的结果是48位的,然后通过F函数将其变成32位,具体过程是通过八个S盒,每个S盒都输入6位,输出4位,八个S盒的定义如下图:

DES加解密算法实现详解_第6张图片

DES加解密算法实现详解_第7张图片



利用F函数得到的结果是32位的,再最终和Li-1异或就得到了Ri,如此迭代16次,

4,将迭代16次的结果进行逆初始置换后得到密文,逆初始置换表如下所示:

DES加解密算法实现详解_第8张图片

5,DES密码的解密算法与加密算法是相同的,只是子密钥的使用次序相反。

你可能感兴趣的:(算法,加密,解密)