feistel 結構主要由以下五個引數決定:
des是典型的feistel密碼結構;解密過程與加密過程完全相反。
初始金鑰長度為64bit;其中第8、16、24、32、40、48、56、64為奇偶檢驗位,所以實際的金鑰長度為56bit;
des 的加密過程大致如下:初始置換ip----->16輪迭代------>逆初始置換
1. 初始置換ip:
重排明文分組的64bit資料,打亂明文中的排列順序。下面的數字表示原資料的位置,如m58表示第58個bit,即明文中第58個bit換到第1個,第50個bit換到第2個。初始置換結果分為兩組,左l0前32bit、右r0後32bit。
2. 具有相同功能的16輪迭代
每輪中都有置換和替換運算。64 bit的明文m經過初始置換 ip ,分成左右兩部分,各32 bit,經過16 輪迭代後再輸出。每輪迭代結構和feistel 結構一樣。
f(ri-1,ki)是第 i 輪的輪函式。ki是第 輪加密的金鑰;ri-1是第 i-1 輪的右邊32bit。
下圖是完整的輪結構,完全遵循feistel 結構。虛線框描述的是f函式,右半部分時子金鑰生成演算法。
子金鑰ki的生成演算法
大概步驟:置換選擇pc1------>迴圈左移ls------>置換選擇pc2
置換選擇pc1:初始輸入金鑰k為64 bit(實際為56 bit),去掉金鑰中8、16、24等奇偶檢驗位,通過下圖的pc1置換,變為各28 bit的左右兩部分,記為ci-1(前4行)和di-1(後四行),其中數字代表原資料的位置。
迴圈左移ls:分別對上面得到的ci-1和di-1進行迴圈左移,並將移位後的結果作為置換選擇pc2的輸入。
置換選擇pc2:將ci-1和di-1重新按照下圖編排,將56bit置換成48bit,作為子金鑰ki,其中數字代表原資料的位置。
輪函式結構
擴充套件置換e:將32 bit的ri-1 擴充套件成48bit,中間為原資料的32bit,兩邊為擴充套件位,其中數字代表原資料的位置。將擴充套件後的48bit 於子金鑰ki進行異或運算,結果作為s盒的輸入。
s盒代換:圖中虛線框的部分是8個s盒,整個des演算法中,除了s盒是非線性變換外,其他變換都是線性變換;des演算法保密的關鍵在於s盒(可惜s盒的設計原理不清楚)。
輸入是異或後的48bit ,分為8組,每組6bit,每個s盒有6位輸入,4位輸出。第一位和第6位確定行數,中間四位確定列數。如01表示第1行,1100表示第12列,所以輸出是9,既1001。
非線性表現在根據輸入是011001可以確定輸出是1001,但是根據輸出是1001不能確定輸入是多少(每行都有9)。
置換p:將s盒的32bit 重新排列,排列後的結果就是輪函式輸出的結果。
3. 逆初始置換
第16輪迭代後,將左右兩部分交換,並連線到一起,再進行逆初始置換,產生64bit 的密文。
演算法 學習筆記
1.輸入輸出演算法至少有乙個或多個輸出 2.有窮性 3.確定性 4.可行性 1.正確性a.演算法程式沒有語法錯誤 b.演算法程式對於合法的輸入資料能夠產生滿足要求的輸出結果 c.演算法程式對於非法的輸入資料能夠得出滿足規格說明的結果 d.演算法對於精心選擇的,甚至刁難的測試資料都有滿足要求的輸出結果...
演算法學習筆記
複雜度分析 1.只關注迴圈次數最多的一行 2.總複雜度等於量級最大 的複雜度 3.巢狀 的複雜度等於巢狀 內外複雜度的乘積 單鏈表結構和順序儲存結構的優缺點 儲存分配方式 時間效能 空間效能 單鏈表結構 用一組任意的儲存單元存放線性表元素 查詢 o n 插入和刪除 找到某位置的指標後,插入和刪除的時...
演算法學習筆記
影象分割是機器視覺後續處理的基礎,通過分割提取影象中的目標區域,方便後續進一步分析處理。分水嶺分割演算法 傳統的分水嶺演算法,是基於數學形態學的分割方法。其基本思想是,將2d影象視為3d地形 其中,畫素的座標 地形的位置,畫素的灰度 地形的高度 每乙個區域性極小值及其周圍區域稱為集水盆地,而集水盆地...