時間:2021/12/20
一.DES算法加密流程
1.加密流程圖
如上圖所示,DES的明文和密文都以64bit為一個分組,加解密使用同一個算法,只是密鑰的使用順序是相反的,密鑰長度為56bit,一共有16輪。
2.加密過程的公式化描述
對於加密過程的每一輪,上一輪的右邊保持不變成為下一輪的左邊,上一輪的右邊和輪密鑰作為輪函數的輸入,輪函數的輸出和上一輪的左邊異或后作為下一輪的右邊。(注意這里的上一輪指的是下標位i-1的一輪,下一輪指的是下標位i的一輪)
3.子密鑰生成算法
子密鑰生成:開始的64bit密鑰是實際的56bit密鑰+8bit奇偶校驗位,置換選擇1是先去掉了8bit奇偶校驗位,然后將剩下的56bit密鑰按照置換表的位置重新進行排列。在完成置換選擇1后,將56bit密鑰分成左右各28bit,然后左右分別循環左移,需要注意不同輪數需要的移位位數是不同的(有一個表格),需要注意的是左右兩邊是分開進行循環移位的。然后合並左右兩邊,去掉固定位置的比特,然后根據置換選擇2的表格重新進行排列,排列后就可以得到該輪48bit的輪密鑰。
4.輪函數(F函數)的實現過程
上圖是F函數內部的過程。
5.選擇擴展置換E
選擇擴展置換:F函數的輸入是上一輪的右邊和輪函數,由於上一輪的右邊為32bit,而輪函數是48bit,所以需要對上一輪的右邊進行擴展,從32bit擴展到48bit。方法是將32bit寫成8*4的矩陣,然后增加兩列,也就是增加16bit,增加兩列的內容按照位置下標與相應位置的內容相同。
6.壓縮替代(S盒)
壓縮替代S盒:在經過選擇擴展置換之后,將得到48bit信息與48bit輪密鑰進行異或。異或后的信息作為S盒的輸入。將輸入的48bit分成8組,每組6bit,然后每組的輸出為4bit。根據分組號選擇相應的S盒,將6bit中的第一個比特位和第六個比特位作為行號,中間4個比特位作為列號,選擇一個16進制數字,然后將輸入的6bit數字替換成S盒中的4bit數字(一個十六進制數字)。
7.置換(P盒)
置換P盒:上一個S盒的輸出32bit作為P盒的輸入,按照置換表中的順序進行置換。
二.DES算法解密流程
1.解密流程圖
2.解密算法的公式化表示
解密算法:下一輪的左邊不變成為上一輪的右邊,下一輪的左邊和輪密鑰(與加密使用輪密鑰次序相反)作為輪函數的輸入,輪函數的輸出和下一輪的右邊異或后作為上一輪的左邊。(方便記憶:與加密的左右是相反的)
三.DES的特點