第八周作业
DES加密算法原理:
- 将明文进行分组,每组是长度为64的二进制位。
- 对密钥key进行同样的操作,即将其转换为64位的二进制字符串。
- 对密钥key按照PC1盒进行第一次密钥变换,变换后的密钥有56位,然后将变换有的密钥进行分割,即左边28位哟弄个C0存储,右边28位用D0进行存储。
- 以C0和D0为基础,开始进行16轮密钥扩展,扩展规则为,Cn由Cn-1循环左移1位或者2位形成,Dn由Dn-1循环左移1位或者2位形成。
- 进行C和D的合并,即将Dn连接在Cn的右边,形成16个扩展后的新密钥。
- 对明文进行操作,首先对明文进行一次IP置换,得到变换后的明文IPnewarr。
- 将变换后的明文IPnewarr进行分割,左边32位由变量Ln[0]存储,右边32位由变量Rn[0]存储。
- 接着,由Ln[0]和 Rn[0]为基础,开始进行16轮扩展,扩展规则是,Ln [i]= Rn[i-1],Rn[i] = Ln[i-1]^f(Rn[i-1],keyk[i]),也就是说,新一轮的Ln是上一轮的Rn,新一轮的Rn是上一轮的Ln与f函数的值进行异或运算后得到的结果,其中key[i]是新扩展的密钥。
- 计算f函数,首先按照E盒将Rn进行变换。
- 变换之后的Rn与第n个扩展后的新密钥进行异或运算。
- 将第10步的结果进行分组,共48位长,每6位一组,共8组,将这8组命名为B1-B8.
- 计算Bni和Bnj,Bni是Bn的第一位和第六位组成的二进制数所代表的十进制数,Bnj是Bn的第二到第五位组成的二进制数所代表的十进制数。
- 计算Sboxn,Sboxn的值是Bni和Bnj在Sn中对应的十进制数代表的二进制数。
- 将八个Sboxn二进制数连接起来,然后进行一次P置换操作,就是f函数的值。
- 将L和R进行16次扩展后,将最后一次所得的L16和R16反向连接起来,即R16L16,然后将其进行一次IP逆置换形成密文的二进制位。
- 最后将这个二进制字符串转换成16进制字符串就是得到的16进制密文。