DES加解密原理
1、DES的加密过程的理解介绍
DES是典型的分组加密
加密前先将明文编码表示后的二进制序列划分为长度为64b的分组,DES算法的密钥也是长度为64b的二进制序列。
DES算法步骤:
1)初始置换IP
2)16轮迭代处理
3)互换左右32位
4)初始逆置换IP^-1
(1)初始置换IP
初始置换IP是将64b的明文进行位置重排,通过IP运算得到一个乱序的64b明文组,置换后的数据平均分为左右两段,用L和R来表示,这两部分数据是下一代迭代变换的初始输入。
(2)迭代处理
每轮迭代只对右边的32b进行一系列加密变换F,加密变换包括选择运算E、密钥加密运算、选择压缩运算S,置换运算P,在一轮迭代即将结束时,把上一轮左边32b与本轮经加密变换F得到的32b进行模二相加,作为下一轮迭代时右边的段,并将上一轮右边的未经变换的段直接送到左边寄存器中作为下一轮迭代时左边的段。
1)选择扩展运算E
将输入的32b拓展成48b输出,扩展方法是重复某些位置上的元素,共有16个位置上的元素被读了两次
2)密钥加密运算
将子密钥产生器输出的子密钥K与选择扩展运算E输出的48b数据按位模二相加
3)选择压缩运算S
48比特自左至右分成八组,每组6b,然后送入8个S盒。每个S盒能够将6b的输入转化为4b的输出(将输入的第一位和第六位组成的二进制数值作为横坐标,其它4b是纵坐标,查询S盒表得到最终数值),最后得到的十进制数均用二进制表示
4)置换运算
对盒子中的数据进行坐标变换
(3)子密钥产生器
通过16轮置换选择和每轮左移位数加一得到16个子密钥
(4)逆初始置换
利用置换表得到
2、DES加密的算法简写
#初始置换表
#逆初始置换表
#选择扩展运算表
#8个S盒表
#置换选择PC-1表
#置换选择PC-2表
#移位次数表
#置换
def table(data,table1)
test = []
for i in range(0, len(table1)):
test.append(data[table1[i] - 1])
return test
#循环左移
def cyclicLeft(temp, num)<