DES加密

参考:DES加密算法_不揭.的博客-CSDN博客_des加密算法

这位大佬写的非常好,建议去看一看。

--------------------------------------------------------------------------------------------------------------------------------

des加密,是一种对称加密算法,一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者必须共同持有该密钥

明文按64位进行分组密钥长64位,密钥实际长度是56位(64-8)(第8、16、24、32、40、48、56、64位是奇偶校验位使得每个密钥都有奇数个1)。

1)DES的加密过程
明文64位->初始置换IP->生成子密钥->在密钥控制下进行16轮加密变换->交换左右32比特->逆初始置换IP-1->密文64位

假设我们输入明文M,选取密钥K

a.初始置换IP

(这里的置换只是将数据的位置进行变化,得到新的数据。初始逆置换表和初始置换表是相互可逆的,只是还原 原来的数据位置)

被分组为一组长64位的明文M 根据初始IP置换表进行置换

例如:

DES加密_第1张图片

 把64位明文按照表中的规则替换,将数据的第58位放在第一位,将第50位放在第二位,以此类推。由明文M得到M'

b.子密钥生成

由于16轮加密变换每一轮的迭代都有密钥参与,因此需要产生不同的轮密钥共16组。

DES算法子密钥输入长度为64位,但是只有48位是有效的,所以需要对密钥K进行变换得到每一轮所需的子密钥。16轮迭代就需要16个48位的子密钥来进行加密。

子密钥的产生:

DES加密_第2张图片

(1)64位密钥经过置换选择1,选择其中的56位,对56位密钥同样分为左右28位。

(2)每轮:按照子密钥计算逻辑表,每一轮进行循环左移运算分别得到新的56位,这56位再经过第二次置换选择(48位)就得到了本轮的子密钥(48位)。

根据置换表来选择有效的位数

c.16轮加密变换

M’的前32位作为L0(32位),后32位作为R0(32位)。

DES加密_第3张图片

 可以从图中看出,左边的32位L0经过变换成为下一轮右边的输入,右边的32位R0直接成为下一轮左边的输入。

L0->R1:

DES加密_第4张图片

 (1)扩充/置换:此处的R0先进行扩充置换变成了48位,因为在DES算法中有效密钥的长度是48位所以要对其进行扩充置换,将32位的输入扩充为48位,以便于与48位的密钥进行运算。
(2)与第一轮密钥异或:扩充之后与48位的密钥进行异或运算,又得到了一个临时的48位数据。

(3)代换/选择:因为下一轮的输入只需要32位,所以这48位数据需要转换为32位的数据。

        48位数据如何经过代换/选择变为32位是整个DES算法的核心,简称S盒。
DES加密_第5张图片

 每个S盒6选4

每个S盒:对照着4行16列的表,6比特输入中的第1比特和第6比特组成的二进制数来确定行,中间4位二进制数来确定列,对应行、列位置的十进制数的4位二进制数表示作为输出。

例如的输入为101001,则行数和列数的二进制表示分别是11和0100,即第3行和第4列,第3行和第4列的十进制数为3,用4位二进制数表示为0011,所以的输出为0011。

DES加密_第6张图片

DES加密_第7张图片

(4)置换

(5)与L0异或:接下来将这32位数据与上一轮的L0进行异或运算得到了R1的输入(32位)。

d.交换左右32比特

e.逆初始置换IP-1

逆置换是初始置换的逆运算。从初始置换规则中可以看到,原始数据的第1位置换到了第40位,第2位置换到了第8位。则逆置换就是将第40位置换到第1位,第8位置换到第2位。以此类推,逆置换规则表如下:

DES加密_第8张图片
 

得到密文

你可能感兴趣的:(密码,安全)