導航:首頁 > 源碼編譯 > 鍵合演算法

鍵合演算法

發布時間:2024-07-13 11:07:27

① DES演算法實現

完成一個DES 演算法的 詳細設計 ,內容包括:

DES(Data Encryption Standard)是一種用於電子數據加密的對稱密鑰塊加密演算法 .它以64位為分組長度,64位一組的明文作為演算法的輸入,通過一系列復雜的操作,輸出同樣64位長度的密文。DES 同樣採用64位密鑰,但由於每8位中的最後1位用於奇偶校驗,實際有效密鑰長度為56位。密鑰可以是任意的56位的數,且可隨時改變。

DES 使用加密密鑰定義變換過程,因此演算法認為只有持有加密所用的密鑰的用戶才能解密密文。DES的兩個重要的安全特性是混淆和擴散。其中 混淆 是指通過密碼演算法使明文和密文以及密鑰的關系非常復雜,無法從數學上描述或者統計。 擴散 是指明文和密鑰中的每一位信息的變動,都會影響到密文中許多位信息的變動,從而隱藏統計上的特性,增加密碼的安全。

DES演算法的基本過程是換位和置換。如圖,有16個相同的處理階段,稱為輪。還有一個初始和最終的排列,稱為 IP 和 FP,它們是反向的 (IP 取消 FP 的作用,反之亦然)。

在主輪之前,塊被分成兩個32位的一半和交替處理;這種縱橫交錯的方案被稱為Feistel 方法。Feistel 結構確保了解密和加密是非常相似的過程——唯一的區別是在解密時子鍵的應用順序是相反的。其餘的演算法是相同的。這大大簡化了實現,特別是在硬體中,因為不需要單獨的加密和解密演算法。

符號表示異或(XOR)操作。Feistel 函數將半塊和一些鍵合在一起。然後,將Feistel 函數的輸出與塊的另一半組合在一起,在下一輪之前交換這一半。在最後一輪之後,兩隊交換了位置;這是 Feistel 結構的一個特性,使加密和解密過程類似。

IP 置換表指定64位塊上的輸入排列。其含義如下:輸出的第一個比特來自輸入的第58位;第二個位來自第50位,以此類推,最後一個位來自第7位輸入。

最後的排列是初始排列的倒數。

展開函數被解釋為初始排列和最終排列。注意,輸入的一些位在輸出時是重復的;輸入的第5位在輸出的第6位和第8位中都是重復的。因此,32位半塊被擴展到48位。

P排列打亂了32位半塊的位元。

表的「左」和「右」部分顯示了來自輸入鍵的哪些位構成了鍵調度狀態的左和右部分。輸入的64位中只有56位被選中;剩下的8(8、16、24、32、40、48、56、64)被指定作為奇偶校驗位使用。

這個排列從56位鍵調度狀態為每輪選擇48位的子鍵。

這個表列出了DES中使用的8個S-box,每個S-box用4位的輸出替換6位的輸入。給定一個6位輸入,通過使用外部的兩個位選擇行,以及使用內部的四個位選擇列,就可以找到4位輸出。例如,一個輸入「011011」有外部位「01」和內部位「1101」。第一行為「00」,第一列為「0000」,S-box S5對應的輸出為「1001」(=9),即第二行第14列的值。

DES演算法的基本流程圖如下:

DES演算法是典型的對稱加密演算法,在輸入64比特明文數據後,通過輸入64比特密鑰和演算法的一系列加密步驟後,可以得到同樣為64比特的密文數據。反之,我們通過已知的密鑰,可以將密文數據轉換回明文。 我們將演算法分為了三大塊:IP置換、16次T迭代和IP逆置換 ,加密和解密過程分別如下:

實驗的設計模式是自頂向下的結構,用C語言去分別是先各個函數的功能,最後通過主函數將所有函數進行整合,讓演算法更加清晰客觀。

通過IP置換表,根據表中所示下標,找到相應位置進行置換。

對於16次 迭代,我們先將傳入的經過 IP 混淆過的64位明文的左右兩部分,分別為32位的 和32位的 。之後我們將 和 進行交換,得到作為IP逆置換的輸入:

子密鑰的生成,經歷下面一系列步驟:首先對於64位密鑰,進行置換選擇,因為將用戶輸入的64 位經歷壓縮變成了56位,所以我們將左面和右面的各28位進行循環位移。左右兩部分分別按下列規則做循環移位:當 ,循環左移1位;其餘情況循環左移2位。最後將得到的新的左右兩部分進行連接得到56位密鑰。

對半塊的 Feistel 操作分為以下五步:

如上二圖表明,在給出正確的密碼後,可以得到對應的明文。

若密碼錯誤,將解碼出錯誤答案。

【1】 Data Encryption Standard

【2】 DES演算法的詳細設計(簡單實現)

【3】 深入理解並實現DES演算法

【4】 DES演算法原理完整版

【5】 安全體系(一)—— DES演算法詳解

閱讀全文

與鍵合演算法相關的資料

熱點內容
紹興程序員接私活攻略 瀏覽:640
java獲取上傳圖片 瀏覽:46
主次梁交叉處箍筋加密長度 瀏覽:961
快遞時效的演算法 瀏覽:583
菜譜大全pdf 瀏覽:315
怎麼在風雲pdf上把文件夾匯總 瀏覽:878
java創建子類 瀏覽:531
安卓實況怎麼退出渠道服登錄 瀏覽:106
汽車12v電壓縮機 瀏覽:417
樂圖java 瀏覽:788
命令與征服注冊表 瀏覽:323
聽課app如何保存下來視頻 瀏覽:450
phpiconv支持 瀏覽:92
什麼app可以借到錢 瀏覽:16
單片機中rn是什麼元件縮寫 瀏覽:836
office插件pdf 瀏覽:187
上古卷軸dat1放哪個文件夾 瀏覽:775
文件夾左下角離線狀態 瀏覽:96
手機貼吧app哪個好 瀏覽:583
java文件讀取中文亂碼 瀏覽:515