DES 算法利用一个56+8奇偶校验位(第8, 16, 24, 32, 40, 48, 56, 64位)=64位的密钥对以64位为单位的块数据进行加解密。它是一个迭代的分组密码,利用了使用 Feistel 结构。
下图为Feistel结构。
其中Plaintext(2w bits)是2w长度的明文分组和密钥K,其被分为等长的两部分L0和R0。明文组会经过轮函数F和密钥的N轮迭代后合并成密文组。第i轮迭代的两部分数据是由上一轮数据迭代后的结果,而密钥Ki是Ki-1经过不同的密钥生成算法得出的。
第i轮加密算法用公式表示为(E代表加密过程):(1)、Li(E)=Ri-1(E) (2)、Ri(E)=Li-1(E)⊕F(Ri-1(E),Ki)。但最后一轮迭代后,有一个附加的左右置换过程。
而DES是迭代16轮,明文经过加密后得到该密文为R(E)-L(E)。
解密过程:(D为解密过程)
第一轮:
输入为:L0(D)=R16(E),R0(D)=L16(E);将上述的公式的加密过程改为解密过程。而把密钥的顺序倒序使用。可得:(3)、Li(D)=Ri-1(D) (4)、Ri(D)=Li-1(D)⊕F(Ri-1(D),K17-i)。
输出为:
L1(D)=R0(D)且R0(D)=L16(E)又因为有加密算法公式可得L16(E)=R15(E)所以L1(D)=R0(D)=L16(E)=R15(E) 即是 L1(D)= R15(E) 。
R1(D)=L0(D)⊕F(R0(D),K16)因为上式可知L0(D)=R16(E)且R0(D)=R15(E)所以R1(D)=R16(E)⊕F(R15(E),K16)又因为有加密算法公式可得R16(E)=L15(E)⊕F(R15(E),K16)所以R1(D)=L15(E)⊕F(R15(E),K16)⊕F(R15(E),K16)=L15(E) 所以可以得出R1(D)=L15(E)。
以下剩下的15轮迭代依次类推。可以得出的结论是:
Li(D)=R16-i(E)
Ri(D)=L16-i(E)
则第16轮的迭代结果为L16(D)-R16(D)=R0(E)-L0(E)。
最后还有一次左右置换过程。即得到L0(E)-R0(E)(为加密前的明文组)。
综上所述:可证得DES加密和解密的过程相同,密钥的使用顺序相反,即DES的解密是加密的逆。