數據加密標准(Data Encryption Standard,DES)是當前使用最廣泛的加密體制,對於任意的加密方案,總有兩個輸入:明文和密鑰。
明文是64bits,密鑰是56bits
加密過程就是初始和終結有兩次置換,中間有十六輪加密變換。
以下是詳細過程:
(生成子密鑰)
查看ASCLL表,將computer轉換為如下16進制表示的數:(具體不展開)
63 6f 6d 70 75 74 63 72
置換是根據置換表來的,往下會有提供。
舉個例子:PC-1置換,
置換表PC-2
小結:
整個過程其實就是不斷置換,中間移位一次的過程,最后會產生一個48位的子密鑰,每一輪都不一樣,每輪迭代的時候會用到,下面就會講到。
為什么每一輪會不一樣呢,因為移位的次數是根據迭代輪數變化的。
(生成密文)
第一步:初始置換
查看ASCLL表,將learning轉換為如下16進制表示的數:(具體不展開)
6C 63 61 72 6E 69 6E 67
首先要明白,這些置換表是固定的。
置換過程開始了,A表指的是 learning 16進制轉換成二進制后的結果,在每個位置標上“下標”,根據上圖的置換表,
我們可以得出B表第1行第1列對應的應該是A表的第58號,我已經標上去了,答案是1。
以此類推,B表第1行第二列------A表50號(1);B表第2行第2列-------A表52號(0)。。。。
第二步:十六輪迭代置換。
Li=Ri-1;
Ri=Li-1⊕F(Ri-1,Ki)
L和R代表的是密文的左半部分(32位),和右半部分(32位)。
第一條公式我們可以看出:第二輪的左邊等於第一輪的右邊;重點是第二條公式,右邊又等於什么呢?接下來詳細講:
過程:R0先擴展成48位,然后跟第一輪的子密鑰K1(如果不知道怎么來的,請往上翻),進行異或操作之后,放入S盒當中(相當於公式中的F函數),最后輸出32位,作為下一輪的右邊,即R1。
補充:
1.擴展置換:中間4位不變,前后補充1位。
2.S盒的方法是這樣子的:
S盒一共包含8個盒子,跟置換表一樣,是DES固定不會變的,自行百度一下盒子的內容。所以異或之后不是有48位嗎,每8位放入一個盒子。
舉個例子,上圖S1中, 111100 前后兩位是10,說明是第2行,中間4位是1110,說明是第14列,那么你就到S1盒子的第2行第14列中找出那個數字,也就是5。
好,到這里你就完成了一次迭代,你也因此得出了第二輪的R1和L1。
。。。接下來,就是漫長的16輪迭代過程。
第三步:終止置換
(道理就不用講了吧)
當然,解密過程就不多說,逆過來而已。
(1、本文只是舉例子加密,助於初學者理解)
(2、本文沒有提供所有的置換表)