首先是个大家常见的抽象原理图,这是了解个大概具体还要继续细化每个步骤。
DES算法总览中包括ip和ip-1,也就是初始置换和逆初始置换。
初始置换和逆初始置换都是跟据相应的表对原始数据进行变换
一.初始置换
该初始置换表的数字排列是由规律的(自己观察即可,规律不重要)。
但规律能简化置换过程。置换方法有二种。
1.1无规律置换
根据初始置换表,置换表上的对应数字x(x确指一个数)就是原数据的第x位,那么只需把置换表上的x数字替换成原数据的第x为对应的字母即可,
然后跟据替换后的置换表依次读出的结果就是置换后的结果。
1.2有规律置换
对应后的置换结果表是根据图上的数字和箭头生成的,数字对应的x列是置换结果中的x行,然后箭头方向逐个填入即可。
二.然后对处置置换后的数据进行左右等分成L0和R0,对Ro和密钥k进行f(R0,K)运算,然会再和L0进行异或运算。
2.1f(Ro,k)运算的详细过程
2.1.1对RO进行扩展置换变成48位置。
扩展置换就是把Ro的32位分成8组,每组6位的数据。每组扩展2个数字,那么也就扩展了2*6=12位。扩展规则是:当前组的第一位是原始前一组的最后一位,当前组的最后一位是原始下一组的第一位。
2.1.2然后扩展置换后的48位与密钥异或生成48位的数据d1。
这里注意的是每轮秘钥的k不同。在对应的一轮需要用对应的秘钥进行异或。每轮秘钥计算在下面再做另外讨论。
2.1.3根据上面的生成的48位数据d1进行s压缩置换
s压缩置换也有一个置换规则表。
置换规则:把48为的d1进行分组分为8组,一组6位,假设其中一组是100100,那么取最前后最后2位数字组成二进制10对应的10进制数就是x行,中间的4位数字组成二进制0010对应的10进制数是y列,然后再上表中找的x行y列里面对应的10进制,再把10进制转换成4位的二进制。把每组的二进制拼接起来的32位数据d2就是s盒压缩置换的结果。
p盒置换
根据p盒置换规制置换即可。然后对p盒置换后的数据进行ip-1逆置换即可。
三.计算每轮的秘钥k
![在这里插入图片描述](
![在这里插入图片描述](
其中的置换选择就是根据置换选择表进行的。初始秘钥跟据相应的秘钥置换表进行变换,然后对C0和D0进行左移相应的位数(移动多少位有轮数决定)。然后合并进行压缩置换,这个时候的压缩置换是根据压缩置换规制表2进行的。除了第一次都根据子秘钥规则表其他的规制表都是根据压缩置换规则表。