DES加密
DES加密前言不是第一次接触DES了 每次总是忘了细节。写篇博客和复现代码来防止自己遗忘文章目录DES加密一.DES概念二.DES核心加密流程1.基本原理2.大致流程涉及几个核心概念3.详细加密步骤**1置换****2轮循环加密****3轮密钥异或**(4)P盒置换4.循环迭代三.补充**子密钥的生成**PC_1置换分组循环移位PC_2置换流程总结参考资料一.DES概念什么是DESDESData Encryption Standard是一种对称加密算法。它是在20世纪70年代初期由IBM研发的。它的设计目标是提供高度的数据安全性和性能并且能够在各种硬件和软件平台上实现。tips:对称加密加密和解密使用的密钥相同DES使用的是 Feistel function 网络解密使用的是同一个轮函数。DES使用56位的密钥和64位的明文块进行加密。DES算法的分组大小是64位因此如果需要加密的明文长度不足64位需要进行填充如果明文长度超过64位则需要使用分组模式进行分组加密。二.DES核心加密流程1.基本原理DES传入的密钥和明文都是64位明文是按照64位为一组进行划分如果不是64的倍数会进行补位。密钥长64位但是只有56位参与运算剩下的8位用作奇偶校验位实际上经过s盒代换后参与的只有48位后面再讲n个64位明文数据经过DES加密后得到的n个64位便是密文2.大致流程涉及几个核心概念Ip置换根据ip表对明文进行替换ip表就是一个全局变量常数表一会会讲分组迭代64位数据后32位赋给L0,前32位是经过轮函数f(ro,k1)代换后再和l0异或带入,就是每次对右半32位进行轮函数代换后再和左32位异或然后交换左右32位使得异或后的右半成为下一轮的左半。然后再把前一轮未处理的左半放在下一轮作为右半处理。F轮函数先扩展32位至48位然后进行异或48位的子密钥k然后进行S_box压缩为32位最后再进行一轮p置换可能有很多概念初听比较繁琐待我一点点深入3.详细加密步骤1置换如下图initial permutation是初始置换所使用的表final是最后逆置换所使用的表。这个置换表是固定的全局数组在逆向分析中可以通过这个表锁定DES的加密特征解释下58是在这个表的第一位58代表的意思是将原来明文的第58个数据放在这个第一位。依次50就是将原来的明文第50位数据放在第二位。这个表是8*864位如此一轮循环下来刚好对原来的明文进行了一次置换所以叫初始置换。逆置换同理。2轮循环加密这里我就不用复杂的公式了在经过第一轮对明文的置换后数据分为左半32位和右半32位此时进入第一轮循环左32位L0刚才的右半32位右半32位进行轮函数处理后再和左半32位进行异或填入。第一轮循环完毕。这个轮循环加密就是针对每一轮的右半32位。以下为操作步骤E扩展将32位数据扩展为48位。为什么是48位因为密钥是64位去除校验位后是56位然后经过压缩代换后是48位。明文要和密钥进行异或就要保证数据位数长度一致。所以要把明文扩展为48位。***扩展规则**很简单把32位数据以4位为一组进行划分刚好分为8组对每一组的数据都在最前一位和最后一位扩展一位进而形成每组数据都是6位然后八组就是6*848位。如下图1为原始数据图2为扩展后的数据注意扩展的数据都是来自扩展前的明文这一点不要搞混不要觉得1来自上一组扩展后的最后一位数据就行3轮密钥异或将扩展后的数据和经过代换后的子密钥进行异或形成新的数据。子密钥的生成较为复杂这里先不讲等会说只需要知道原来的64位密钥变成了16轮子密钥S盒压缩S盒压缩的目的是将48位数据再次变成32位这样就可以恢复原来的明文长度操作如下先解释下S盒表这也是个常量表是由8个4进15出的数据表这是我自己命名的可能与网上有些出入操作步骤现在的数据不是6848位吗我们扩展的位数是两位一共有224种组合方式。中间的数据不是4位吗表示的最大数是15这样对于每一组数据扩展的位数所表示的10进制数就是我们的行数中间的原始数据所表示的位数就是我们的列数。共有4*1664种组合。然后一共有8组这就是s盒的由来。以111111为例11111:扩展数据11--表示3 原始数据1111--表示15 查盒第3行第15列所表示的数据就是我们压缩后的数据这个数据是一个15的十进制数转化为2进制后就是刚好四位。这样我们就把6位的数据又还原成了4位的长度。好奇妙(4)P盒置换P盒是一个4*832位的数据盒也是固定常量。像初始代换表一样将这个还原后的数据32位进行一轮p盒置换后所形成的数据就是我们一轮加密后形成的结果。4.循环迭代如此重复16轮最终形成的密文进行拼接就是密文。此时密文的右半部分应该等于上一轮即第15轮加密时的左半32位密文的左半32位应该等于上一轮即第15轮加密后的右半32位数据。三.补充子密钥的生成这里是对第二步轮循环加密的第二步轮密钥异或其中的子密钥的生成进行的补充我们的原始密钥长度是64位去除8位校验位后剩余56位什么是校验位请去搜索计组–海明校验码。56位的数据我们需要取其中的48位进行和明文进行异或。这个从56位取48位的规则就是本章要讲解的重点。PC_1置换PC-1盒是一个56位的数据表通过对密钥进行这样的代换后就形成了初始的56位数据。具体的代换规则和上面的代换规则一样。分组将56位数据分为左半28位和右半28位分别用Ci和Di来表示循环移位 tips: 1. 第i次迭代分别对应第几次循环因为要进行16次循环加密所以一共有16次迭代。2.分别对每次迭代的次数按照对应的移位次数表对左半和右半的数据进行循环左移。eg:第一次迭代对应i1,然后查表发现循环左移的次数是1那么对于c1和d1我们就需要分别进行循环左移1位。循环移位不同于普通的移位高位会被覆盖到低位这里需要说明这个迭代是对应第几次循环的时候用的例如第二次循环你就查第二次迭代的表就行了循环移位完成后就进入下一步。不需要再看这个表。PC_2置换PC_2是一个6*848位的数据表通过把循环移位后的56位数据进行查盒代换变成48位。有趣的是这个56变48位并不是什么很复杂的规则仅仅是选择了48个数制成了表盒然后通过56位的数据进行查盒替换而已。这个盒和前面的盒不一样的地方就在于原来的盒的长度和之前的明文的长度是一致的但是这个盒的长度和明文密钥的长度不一致。它可能最大的数是64但是所有的数的个数加起来是48个仅此而已。经过PC_2置换后的48位数据就是子密钥第一代就是子密钥K1第二代就是子密钥K2,如此往复。一共16个子密钥。对应16次循环流程总结1.明文传入64位密钥传入64位–2.明文按照初始代换表进行代换–3.明文分为左半32位和右半32位-4.右半32位传入下一轮作为左半32位左半32位进行func加密后再和上一步的右半32位即本轮的左半32位进行异或—5.最后再进行逆置换形成密文。func加密包含16次循环每次循环都有对应的子密钥的生成func的步骤包含e扩展轮密钥异或s盒压缩P盒置换代换。用到的常量盒可以作为逆向DES的特征分析1初始IP置换盒2逆IP代换盒3S盒4P盒5PC-1置换盒6PC_2置换盒7循环移位表代码实现见我下一篇文章。参考资料通俗易懂十分钟读懂DES详解DES加密算法原理DES攻击手段以及3DES原理-CSDN博客DES加密算法密码学信息安全_哔哩哔哩_bilibili DES加密算法-加密过程_哔哩哔哩_bilibili