原理:该算法是一个利用56+8奇偶校验位(第8,16,24,32,40,48,56,64)=64位的密钥对以64位为单位的块数据进行加解密
DES密钥为64位,加密的数据也为64位
1.秘钥置换
密钥置换对应的表(8*7)(8*6) 密钥循环左移对应的表备注:置换表里的数字是数据对应的位置
1.1 将64位的密钥按照PC-1表做置换,得到去除奇偶校验的56位密钥
1.2 将得到的56位密钥分为左右两部分,记做C0,D0
1.3 按照密钥循环左移表计算出16组56位的密钥,依次是C1,D1为C0,D0左移一位,C2,D2为C1,D1左移一位,C3,D3为C2,D2左移两位......
1.4 将得到的16组密钥按照PC-2表做置换处理,可以得到16组48位的密钥(记做Kn)
2.加密数据
IP表(8*8) E扩展置换表(8*6)2.1 对64位明文进行IP表转换
2.2 将转换后的64位密文分为两个32位的密文L0,R0
2.3 将L0,R0分别进行E扩展置换,得到置换后的48位的L0',R0'
2.4 将L0',R0'和K1(48位)进行异或,得到T1
S盒置换表2.5 将异或后的结果T1进行S盒置换,得到32位结果T1'
具体置换过程:将异或运算得到的48位结果数据分成8个6位的块,将每一块通过对应的一个S盒产生一个4位的输出,S盒接收6位的输入,经过置换输出4位的数据。 将第I个6位的块作为要查询的SI(eg:如果6位的块对应8个里的第2个,则查询S2的表),将6位的输入中的第一位和第六位取出来1形成一个两位的二进制数X,将其转换为十进制作为行数,然后将中间4位构成另一个二进制数Y,并将其转换为十进制数作为列,然后查出S的X行Y列所对应的整数,将该整数置换为一个4位的二进制数,即S盒的输出。(eg:输入数据中的第一个6位数据块位010111,则需要通过查S1盒,先取出010111的第一位和第六位,则X=01,其对应的十进制为1。然后取出中间4位的1011,则Y = 1011,其对应的十进制为11,在S1盒中第1行11列的数为11,将其转换为二进制位1011,则输出1011)
P盒置换表(2*16)2.6 将置换后的32位结果T1'进行P盒置换,将置换后的结果与L0进行异或得到L0*
2.7 将L0*赋值给R1,将R0赋值给L1,之后进入下一轮迭代。最后生成L16和R16,其中R16为L15与P盒置换结果做异或运算的结果,L16是R15的直接赋值
IP-1置换表(4*16)2.8 16次迭代之后,得到了16对32位数据块,L1R1,L2R2,......L16R16,将最后一对L16R16做位置交换,得到R16L16,将R16L16做IP-1置换,得到的就是最终的密文。
网友评论