DES的加密算法:
(1)生成子密鑰
首先,將64比特的密鑰(實(shí)際有效位數(shù)只有56比特)進(jìn)行置換,得到56比特的密鑰串;
然后,將56比特的串分為兩個(gè)28比特的子串,經(jīng)過16輪的循環(huán)左移以及合并置換,生成16個(gè)子密鑰,記為K1K2K3...K16;
(2)加密
首先,將64比特的明文W做初始置換,得到結(jié)果IP(W)晋被;
將結(jié)果分成兩個(gè)32比特的子串,記為L0和R0,所以L0R0=IP(W);
然后,根據(jù)L0挂脑、R0以及K1,求得L1和R1,具體如下:
L1=R0,即L1跟R0完全相同欲侮;
R1=P(S(E(R0)^K1))^L0,其中:
E(R0)表示對R0做擴(kuò)展置換威蕉;
E(R0)^K1表示上一步的結(jié)果與K1做異或運(yùn)算;
S(E(R0)^K1)表示上一步的結(jié)果做S-box運(yùn)算牍戚;
P(S(E(R0)^K1))表示上一步的結(jié)果做置換虑粥;
P(S(E(R0)^K1))^L0表示上一步的結(jié)果與L0做異或運(yùn)算.
以上的過程就是一次輪函數(shù).如此,再由L1、R1以及K2,求得L2R2.以此類推,經(jīng)過16次輪函數(shù)的迭代即可求得L16R16.
最后,把L16R16交換順序,得到R16L16,再經(jīng)過一次逆置換FP(R16L16),可以得到64比特的密文C,所以C=FP(R16L16).
DES的解密只需將16個(gè)子密鑰以相反的順序加入到輪函數(shù)第晰。
DES的解密算法:
(1)生成子密鑰
解密的時(shí)候使用的子密鑰與加密時(shí)的順序相反,記為K16K15...K2K1;
(2)解密
首先,將64比特的密文C做初始置換IP(C),
由于C=FP(R16L16),所以IP(C)=IP(FP(R16L16))=R16L16,因此得到的結(jié)果為R16L16.
將結(jié)果分成兩個(gè)32比特的子串,也就是R16和L16.
然后,對其進(jìn)行輪函數(shù)運(yùn)算,結(jié)果記為XY,具體如下:
X=L16,
Y=P(S(E(L16)^K16))^R16.
從加密的過程中,我們知道,
L16=R15,
R16=P(S(E(R15)^K16))^L15,
因此,Y=P(S(E(L16)^K16))^P(S(E(R15)^K16))^L15.
由于L16=R15,所以P(S(E(L16)^K16))=P(S(E(R15)^K16)),
所以P(S(E(L16)^K16))^P(S(E(R15)^K16))=00000000000000000000000000000000,
因?yàn)?0000000000000000000000000000000^L15=L15,
所以Y=P(S(E(L16)^K16))^P(S(E(R15)^K16))^L15=L15.
(以上參照Feistel加解密算法中的函數(shù))由此可知,R16L16經(jīng)過一次輪函數(shù)之后,得到的結(jié)果是R15L15.
如此,在對R15L15做輪函數(shù)運(yùn)算,得到R14L14.以此類推,經(jīng)過16次輪函數(shù)的迭代,得到R0L0.
最后,把R0L0交換順序,得到L0R0,再經(jīng)過一次逆置換FP(L0R0)=FP(IP(W))=W,就得到了明文W.
綜上所述,DES解密算法實(shí)際上是DES加密算法的的逆。