参考:DES加密算法_不揭.的博客-CSDN博客_des加密算法
这位大佬写的非常好,建议去看一看。
des加密,是一种对称加密算法,一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者必须共同持有该密码(称为对称密码)。
最初开发的DEA是嵌入硬件中的。
明文按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置换表进行置换*
例如:
把64位明文按照表中的规则替换,将数据的第58位放在第一位,将第50位放在第二位,以此类推。由明文M得到M'
b.子密钥生成
由于16轮加密变换每一轮的迭代都有密钥参与,因此需要产生不同的轮密钥共16组。
DES算法子密钥输入长度为64位,但是只有48位是有效的,所以需要对密钥K进行变换得到每一轮所需的子密钥。16轮迭代就需要16个48位的子密钥来进行加密。
子密钥的产生:
(1)64位密钥经过置换选择1,选择其中的56位,对56位密钥同样分为左右28位。
(2)每轮:按照子密钥计算逻辑表,每一轮进行循环左移运算分别得到新的56位,这56位再经过第二次置换选择(48位)就得到了本轮的子密钥(48位)。
根据置换表来选择有效的位数
c.16轮加密变换
取M’的前32位作为L0(32位),后32位作为R0(32位)。
可以从图中看出,左边的32位L0经过变换成为下一轮右边的输入,右边的32位R0直接成为下一轮左边的输入。
L0->R1:
(1)扩充/置换:此处的R0先进行扩充置换变成了48位,因为在DES算法中有效密钥的长度是48位所以要对其进行扩充置换,将32位的输入扩充为48位,以便于与48位的密钥进行运算。
(2)与第一轮密钥异或:扩充之后与48位的密钥进行异或运算,又得到了一个临时的48位数据。
(3)代换/选择:因为下一轮的输入只需要32位,所以这48位数据需要转换为32位的数据。
48位数据如何经过代换/选择变为32位是整个DES算法的核心,简称S盒。
(4)置换
(5)与L0异或:接下来将这32位数据与上一轮的L0进行异或运算得到了R1的输入(32位)。
每个S盒6选4
每个S盒:对照着4行16列的表,6比特输入中的第1和第6比特组成的二进制数确定的行,中间4位二进制数用来确定的列,相应行、列位置的十进制数的4位二进制数表示作为输出。
例如的输入为101001,则行数和列数的二进制表示分别是11和0100,即第3行和第4列,第3行和第4列的十进制数为3,用4位二进制数表示为0011,所以的输出为0011。
d.交换左右32比特
e.逆初始置换IP-1
逆置换是初始置换的逆运算。从初始置换规则中可以看到,原始数据的第1位置换到了第40位,第2位置换到了第8位。则逆置换就是将第40位置换到第1位,第8位置换到第2位。以此类推,逆置换规则表如下:
得到密文
版权归原作者 菜鸟ql 所有, 如有侵权,请联系我们删除。