赞
踩
简化版流程
DES算法将明文按64位分组,使用的密钥长度为64位(实际参与加密的有56位)。
密钥的第8、16、24、…、64位作为校验位,不参与加密
DES的加密思想是对密钥和明文都进行一系列复杂变换处理,中间分为多个小段单独异或加密,最后再合成变换得到最终密文。符合所谓的混淆原则和扩散原则。
混淆原则:密文与其对应的明文与密钥的关系足够复杂。
扩散原则:密文中的每一位都受到明文和密钥中的尽可能多位的影响,以隐蔽明文
的统计特性和结构规律。
DES中的密钥不是直接使用的,要经过一系列变换才能拿去跟明文做异或。
提取有效位(56位)
DES中密钥的转换表(DesTransform[56])
把64位密钥提取出56位。(去除校验位)
后续会用到各种转换表,这里简单解释一下,比如第一行第一列的“57”,意思就是把原本数据表中第57个数据填到转换后的新表中的第一行第一列这个位置。
旋转左移,16种结果
针对DES子密钥每一轮的旋转次数(Round轮,Rotations旋转次数)(DesRotations)
为了得到16个不同的子密钥,先将上一步得到的56位密钥分为两组各28位,接着根据该旋转表,分别旋转左移对应位数,旋转完再合并,这样就得到一组新子密钥,而下一组是在前一组的基础上再次对半分并旋转左移获得的。最终生成16组子密钥。
置换选择
DES子密钥的置换选择(Despermuted[48])
其实就是进一步缩小密钥位数。把上一步获得的16组子密钥分别通过该转换表。
于是,我们得到了16组各48位的子密钥。
明文按照64位一组分组。以下操作针对一组64位的明文。
初始置换
DES中数据的初始置换(DesInitial[64])
先将明文按转换表打乱初始化,并将处理后的数据分为两组各32位,记为L0和R0。
扩展置换
DES中数据块的扩展置换(DesExpansion[48])
将Ri由32位转换扩展到48位。
目的是在加密数据的过程中制造一些雪崩效应。
使用数据块中的1位,将在下一步操作中影响更多位,从而产生扩散效果。
XOR
一旦扩展置换完成,便将所得48位数据Ri与先前的子密钥Ki做XOR异或运算。
迭代16次,每次使用对应次序的子密钥。
S盒替换
S盒替换表一共有8个。主要作用是重新把48位数据压缩为32位。
S盒为数据增加了不确定性,从而提升了安全性。
将上一步扩展后获得的48位数据Ri按6位一组,分成8组。
例:
假设我们取第一组数据按上图处理,得到第三行,第15列,则在第一张S盒替换表中找到对应位置的数,这里我们假设找到的数是13,便再将其转换为二进制数1101,这样,便完成了6位数据压缩为4位数据的过程。
P盒置换
DES中数据块的P盒置换
将上一步获得的32位数据经过P盒置换表。
两组异或
从第2步到第5步的操作定义为一个函数f。假设我们回到一开始获得的 R 0 R_0 R0,经过函数f后,输出的应该是一组32位的数据,我们设其为 R 0 ′ R_0' R0′。接下来的操作就是将一开始的另一组数据 L 0 L_0 L0与 R 0 ′ R_0' R0′进行XOR异或操作,结果值设为 L 0 ′ L_0' L0′。
交换
现在,经过一系列变换,我们有了新的左右分组 L 0 ′ L_0' L0′和 R 0 ′ R_0' R0′,于是,我们交换两组的位置,即设 R 1 = L 0 ′ R_1=L_0' R1=L0′, L 1 = R 0 ′ L_1=R_0' L1=R0′。
迭代
分组 L i L_i Li和 R i R_i Ri重复第2步到第7步的操作,总共要完成16轮的迭代。其中,最后一轮中左右分组不用交换。
第16轮的 R 16 R_{16} R16在左边, L 16 L_{16} L16在右边。
连接
将最后得到的左分组和右分组重新合并,得到一组64位数据。
最终置换
DES中数据块的最终置换
最终置换其实就是初始置换的逆转换。数据经过该转换表得到最终结果。
总结:
对于这第1步到第10步,如果输入的是明文,输出就是密文;如果按照从最后一步倒回来输入密文,输出就是明文。
加密过程:
1、以K1加密
2、以K2解密
3、以K3加密
解密过程(密钥顺序及应用方向与加密过程相反):
1、以K3解密
2、以K2加密
3、以K1解密
说明:K1、K2、K3是密钥。
整个流程可以用下图表示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。