DES
演算法描述
明文分組為64位,初始金鑰64位,有效金鑰56位,輸出密文64位,16輪迭代的分組對稱密碼演算法。由置換、替換、異或、迴圈移位組成。
流程圖
加密過程
金鑰生成
- 64位初始金鑰先進行一個PC-1置換,目的是根據置換表去掉8位奇偶校驗位,並打亂剩下的56位有效金鑰的順序。將這56位分成C0和D0。
- 兩部分分別根據LSi的值進行迴圈左移,左移後透過PC-2置換,然後合併作為48位子金鑰。
- 整個des中一共會左移十六輪,第1、2、9、16次是左移一位,其他都是左移兩位。
處理明文
- 初始置換IP
先對明文(64位)進行一個初始置換IP,將明文分為L0、R0兩個32位塊。
該過程並不會增加DES的安全性,但這種做法在16位和32位的匯流排出現之前將使得資料更容易載入到DES晶片中。 - 迭代
進行16輪Feistel加密。每一輪都用一個從初始金鑰匯出的48位且每次不同的金鑰(金鑰生成過程如上文所述)。
每一輪操作:
(1)E擴充套件置換
用E置換處理每一輪的R0。目的是把32位的R0擴充套件為48位,和金鑰長度相同,以進行異或操作。
置換過程就是:針對4位元×8組,把每一組的第一位放在上一組的最後一位後面,把每一組的最後一位放在下一組的第一位前面。
置換之後的R與該輪金鑰進行異或。
(2)S盒替換
把異或之後得到的48位送入透過8個內有不同替代表的S-盒,進行替代運算。每個S盒有6位輸入4位輸出,48位輸入分為8個6位元的分組,一個分組對應一個S盒。每一個S盒中是4行16列的表,盒中的每一項都是一個4位的數。用6位輸入的第一位和第六位確定所在行,中間四位確定列,對應一個格子裡的值,即該組的替代運算結果。
(3)P盒置換
S盒代替運算的32位輸出輸入P盒進行置換。
(1)(2)(3)加起來構成f函式
(4)左右交換
P盒置換的結果與64位分組L0異或,然後左、右半部分交換,開始下一輪。
注意第16輪中,最後一步不進行左右交換,而是直接把左右合併。 - 初始IP逆置換
第16輪結束後,左右合併的結果進行IP逆置換。最後得到密文。