首页 > 编程知识 正文

des加密的详细步骤,des加密

时间:2023-05-05 22:43:00 阅读:134079 作者:3696

DES DES加密过程初始置换和逆初始变换48位轮密钥生成器PC-1密钥置换循环移位PC-2压缩置换f变换扩展变换e盒选择压缩变换s盒置换运算p明文变换

DES加密过程

DES加密过程:

输入64位二进制明文和56位二进制密钥。 64位明文在初始置换后,根据位数的高低分为左半部分和右半部分即l和r。 l和r再经过16个回合的变换合并,经过反向初始置换生成密文。 56位密钥由循环密钥生成器生成16个48位密钥,参与l和r 16个循环的转换。

初始置换和逆初始变换DES加密的明文为64位二进制。

初始置换:

将该64位的二进制数按照位数从高到低的顺序编号(例如,最高位的号码为1,最低位的号码为64 ),通过在下图的初始置换表中依次填写号码,进行了1次置换。

由表生成数

以下图的初始置换为例,

将表格中的数量按照到最后一行的顺序(以及58、50、42、10、2、60、52等顺序)排列,例如,第一行接第二行,第三行接第四行,并将表格中的替换数量从表格形式转换为数字形式

反向初始置换:

与初始置换相同,将经过16次变换的明文按位数顺序编号(例如,最高位的位数编号为1,最低位的位数编号为64 ),通过在上图的逆初始置换表中按顺序填写编号,再次进行了变换。

但是,反向初始置换和初始置换是相互相反的。 即,初始置换暂时置换明文,逆初始置换将置换后的64位二进制文件恢复为原来的顺序。 例如,初始置换将编号1的二进制数转换为40,反初始置换将编号40的二进制数转换为1。)

48位轮键生成器

在此更正DES加密过程的记述,以前对加密过程有热情的狼是“输入64位二进制明文和56位二进制密钥”,实际输入的密钥为64位,为8、16、24、32、40、40

64位密钥经48位轮密钥生成器生成16个48位子密钥流程:

64位密钥通过PC-1密钥置换生成C0和D02值,C0和d0通过循环移位生成C1和D1,C1和D1通过PC-2压缩置换形成子密钥K1; C1和D1经过循环移位产生C2和D2,C2和D2经过PC-2压缩置换形成子密钥…C15和D15经过循环移位产生C16和D16,C16和D16经过PC-2压缩置换形成K16。

PC-1键置换

输入64位密钥后,与初始置换相同,将该64位二进制密钥按位数从高到低的顺序编号(例如,最高位的位数编号为1,最低位的位数编号为64 ),依次编号并填写上图的两个表(两个表的合计为8、16、24、334 )

循环移位

在DES加密中,对明文进行16轮变换,密钥也同样进行16轮变换(循环左移),但在对密钥进行1轮变换后,进行进一步变换,并作为子密钥输出给明文的变换。 对密钥的16次变换依次编号为1、2、16,密钥的每一次变换中c和d这两个值进行的循环移位(循环左移)的位数不同,每次变换中进行的循环移位的位数由上图决定。

PC-2压缩置换

c和d经过循环左移以产生下一轮的c和d,例如,C0和D0经过第一轮变换以产生C1和D1,其中所产生的c和d经过PC-2压缩置换以形成每一轮的48比特密钥k。 例如,C1和D1经过压缩置换生成K1,参与明文的第一轮变换。 PC-2压缩置换与初始置换相同,将c和d加在一起的56位二进制数按位数从高到低的顺序编号(例如最高位的位数编号为1,最低位的位数编号为56 ),按顺序编号填写上图的表,则按9、18、22、25、35、36、36的顺序进行

f变换在明文变换的过程中有如下图所示的f变换。

F变换流程

在f变换中,首先在将32位的r值进行了扩展变换的e框中生成48位的值,与48位的循环密钥生成器生成的48位的位密钥进行异或运算,得到48位的值,再经过选择压缩变换在s框中生成32位的值,经过置换运算

扩展转换e盒

创建如上图所示的4x8矩阵,将每行的第一个编号添加到前一行的末尾,并将每行的最后一个编号放在下一行的开头。 将第一行的第一个编号添加到最后一行的末尾,并将最后一行的最后一个编号放在第一行的开头,如下图所示。

因此,形成扩展转换箱e。

同样,按位数从高到低的顺序对32位的二进制r值进行编号(例如,最高位比特编号为1,最低位比特编号为32 ),依次对上图的扩展变换e表进行编号,生成48位的值。

选择压缩变换s框的s框,如下图所示,共有S1、S2、…、S8共8个。

在扩展e盒中生成的48位值与在循环密钥中生成的48位密钥的异或生成48位值,将48位值按位数高低分为6位的8个6位二进制数与S1盒相对应,从以下6位开始以S1框为例,将48位值的最高6位作为010101,将该6位的二进制的最高位比特和最低位比特作为一个2位的二进制01 (十进制1 )作为选择S1框

的行数,将该6位二进制数的中间4位1010(十进制数10)作为选择S1盒的列数,

010101[行数01(1),列数1010(10)]对应S1盒1行10列的12,12转成二进制是1100,其他7个6位二进制数也在相应的S盒中找到相应的数再转换成4位二进制数(在S盒中十进制数转换成的二进制数不超过4位)后再合并成一个32位值,这样一共8个6位二进制数转换成4位二进制数就将48位值压缩成了32位值。

置换运算P


将经由选择置换S盒生成的32位值按位数高低依次编号(如最高位编号为1,最低位编号为64),依次按编号填入上面的表中,这样由置换运算P生成的32位值就是经过F变换最终生成的32位值。

明文变换


由初始置换生成L0与R0,在16轮明文变换中R作为下一轮变换的L并与K经过F变换后与L异或生成下一轮的R,这样就生成了下一轮的L与R。
经过16轮这样的变换之后再经过逆初始置换就得到了最后的密文。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。