DES的安全性依赖于虚假表象,从密码学的术语来讲就是依赖于“混乱和扩散”的原则。混乱的目的是为隐藏任何明文同密文、或者密钥之间的关系,而扩散的目的是使明文中的有效位和密钥一起组成尽可能多的密文。两者结合到一起就使得安全性变得相对较高。
密钥构成:64位的密钥包括56+8奇偶校验位(第8,16,24,32,40,48,56,64),对64位为单位的块数据进行加解密。
1)填充:
DES还是一种分组加密算法,该算法每次处理固定长度的数据段,称之为分组。DES分组的大小是64位,如果加密的数据长度不是64位的倍数,可以按照某种具体的规则来填充位。
2)明文置换
置换矩阵(位置矩阵,代表操作后位置,原先的58位放在第一位):
58,50,42,34,26,18,10,2,
60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,
64,56,48,40,32,24,16,8,
57,49,41,33,25,17, 9,1,
59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,
63,55,47,39,31,23,15,7,
图1 置换矩阵
3)密钥加密
进行16轮完全相同的运算,在运算过程中数据与秘钥结合。
函数f的输出经过一个异或运算,和左半部分结合形成新的右半部分,原来的右半部分成为新的左半部分。公式如下:
⊕:异或运算
Kn是向第N层输入的48位的秘钥,f 是以Rn-1和Kn-1为变量的输出32位的函数
通过将原32位数据中的某些位重复出现达到扩展的目的。扩展置换也称位选择函数,俗称E盒。扩展置换(E)通过将第32、1、4、5、8、9、12、13、16、17、20、21、24、25、28、29共16位分别放置在两个位置,从而将32位的数据扩展为48位。扩展后的48位与K1进行异或。
以下异或 置换 等参考:https://blog.csdn.net/yxtxiaotian/article/details/52025653
异或后的结果通过S盒子转换为32位
经过S盒子得到的32位再进行P盒置换
P盒置换后的结果通过异或和交换形成L1和R1
在完成完全相同的16轮运算后,将得到的两部分数据合在一起,将L16与R16的位置交换,再经过一个末置换函数IP-1即可得到64位的密文。
4)子密钥的产生
在3)中使用的Kn,n=1...16;
其中密钥置换 PC-1如下表1所示:
去掉奇偶校验位,压缩置换为56位; 然后分为前后的两个部分;C0,D0
图2 的移位是按照表2进行16轮的循环左移
压缩置换成48的的子密钥:
参考
https://blog.csdn.net/yxtxiaotian/article/details/52025653
https://blog.csdn.net/qq_27570955/article/details/52442092