DES的加密方法是典型的Feistel结构,每一轮加密都是将上一轮的结果分成等长两部分,一部分直接为下一轮的一部分,另一半则经过一次代替后与秘钥按位异或。
加密算法时假设当前到第16轮:
LE16=RE15
RE16=LE15⊕F(RE15,K16)
这里已知的是16轮的结果和秘钥K16。
反过来假设是解密的过程,假设把刚刚加密完的密文再用解密算法还原成明文,同样到达刚刚的加密的第16步,即解密的第0步:
LD1=RD0=LE16=RE15
RD1=LD0⊕F(RD0,K16)
这里第16轮的结果和秘钥K16是已知的。
RD1=LD0⊕F(RD0,K16)
=RE16⊕F(RE15,K16)
=[LE15⊕F(RE15,K16)]⊕F(RE15,K16)
=LE15
LD1=RE15
可以看到解密算法第一轮的结果正好是加密算法15轮的置换,根据同理可解所有轮数都是对应的置换。而且算法在结构上是对称。因此解密算法时加密算法的reverse