一、DES的加密
DES算法是典型的分组密码,加密前先将明文编码表示后的二进制序列划分成长度为64b的分组,DES算法的密钥也是长度为64b的二进制序列,密钥中第8、16、24、32、40、48、56、64位为奇偶校验位。
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进行模二相加,作为下一轮迭代时右边的段,并将上一轮右边的未经变换的段直接送到左边寄存器中作为下一轮迭代时左边的段。
16轮迭代结束后,再将所得的左、右长度相等的L16和R16进行交换得到64b数据。
(1)选择扩展运算E
将输入的32b拓展成48b输出,扩展方法是重复某些位置上的元素,共有16个位置上的元素被读了两次
(2)密钥加密运算
将子密钥产生器输出的子密钥K与选择扩展运算E输出的48b数据按位模二相加
(3)选择压缩运算S
48比特自左至右分成八组,每组6b,然后送入8个S盒。每个S盒能够将6b的输入转化为4b的输出(将输入的第一位和第六位组成的二进制数值作为横坐标,其它4b是纵坐标,查询S盒表得到最终数值),最后得到的十进制数均用二进制表示
(4)置换运算
对8个盒子中的数据进行坐标变换
3、子密钥产生器
DES加密过程共涉及16轮迭代,每轮使用一个不同的48位子密钥,共需16个子密钥,这些子密钥由初始输入的64位密钥产生,初始密钥中有8位奇偶校验位。通过16轮置换选择和每轮左移位数加一得到16个子密钥
4、逆初始置换
利用逆初始置换表得到最后的密文。
二、DES算法解密
密钥与加密的密钥相同,只是子密钥的使用次序相反,得出最后的64b的明文
三、DES加解密算法代码
#初始置换表
#逆初始置换表
#选择扩展运算表
#8个S盒表
#置换选择PC-1表
#置换选择PC-2表
#移位次数表
#置换
def table(data,table1)
test = []
for i in range(0, len(table1)