DES演算法加密

2021-09-03 03:32:47 字數 2710 閱讀 2075

des演算法程式設計與實現

des演算法是一種常用的對稱加密演算法,明文按64位進行分組,金鑰長64位,金鑰事實上56位參與了des運算(第8、16、24、32、40、48、56、64位是校驗位,使得每個金鑰都有奇數個1)分組後的明文組和56位的金鑰按位替代或交換的方法形成密文組的加密方法。

des演算法加密主要由四個部分組成:

初始置換ip

子金鑰ki

加密函式f()

尾置換演算法流程圖如下:

des演算法本身是公開的,所以其安全性在於金鑰的安全性。des演算法具有極高的安全性,到目前,除了使用窮舉搜尋法對des演算法進行攻擊外,還沒有發現更有效的辦法。des演算法把64位的明文輸入塊變成64位的密文輸出,它所使用的金鑰也是64 位的。des演算法的整體缺點是分組比較短、金鑰太短、密碼生命周期短、運算速度比較慢。

des演算法可以分為6個模組:

將明文與密文用二進位制表示

初始置換ip

子金鑰的演算法(金鑰置換)

密碼函式f()

尾置換des解密過程

將位元組轉化為位,每八次換乙個位元組

將16進製制字元轉化為二進位制

其功能是將輸入的64位資料塊按位重新組合,並把輸出分為l0、r0兩部分,每部分各長32位,其置換規則見下圖:

l0、r0是換位後輸出後的兩部分,l0是輸出的左32位,r0是輸出的右32位。

ip初始置換演算法如下圖所示:

1、使用者輸出的金鑰是64 位的,根據金鑰置換表pc1,將64 位變成56 位金鑰。(去掉了奇偶校驗位)

2、將pc1 置換得到的56 位金鑰,分為前28位c0 和後28位d0,分別對它們進行迴圈左移,c0左移得到c1,d0 左移得到d1。移位表與移位演算法如下圖所示:

3、將c1 和d1 合併成56 位,然後通過pc2表進行壓縮置換,得到當前這一輪的48 位子金鑰k1 。

4、然後對c1 和d1 進行左移和壓縮置換,獲取下一輪的子金鑰……一共進行16輪,得到16 個48 位的子金鑰。

演算法流程圖如下:

通過表e 進行擴充套件置換,將輸入的32 位資料擴充套件為48 位;

將擴充套件後的48 位資料與48 位的子金鑰進行異或運算

將異或得到的48 位資料分成8 個6 位的塊,每乙個

通過對應的乙個s 表產生乙個4 位的輸出。其中,每個s 表都是4 行16 列。具體的置換過程如下:把6 位輸入中的第1 位和第6 位取出來行成乙個兩位的二進位制數x ,作為si 表中的行數(0~3);把6 位輸入的中間4 位構成另外乙個二進位制數y,作為si 表的列數(0~15);查出si 表中x 行y 列所對應的整數,將該整數轉換為乙個4 位的二進位制數。

把通過s 表置換得到的8 個4 位連在一起,形成乙個

32 位的資料。然後將該32 位資料通過表p 進行置換(稱為p-置換),置換後得到乙個仍然是32 位的結果資料,這就是f(r, k)函式的輸出。

擴充套件置換表,s盒操作演算法如下圖所示如下:

合併l16 和r16 得到乙個64 位的資料,再經過尾置換後得到的就是64 位的密文。注意:要將l16和r16 合併成r16l16(即左右互換)。尾置換表pi如下:

des的解密過程在原理上是與加密過程一樣的,只有極少的地方不一樣: 

(1)如果加密的時候子金鑰的使用順序是k1,k2……k16,那麼解密的時候子金鑰 的使用順序是k16,k15……k1; 

(2)輸入是64位密文,輸出是64位明文; 

(3)在生成金鑰的時候加密演算法是向左迴圈移動,但是解密演算法是向右迴圈移動。

des解密過程如下圖所示:

為了方便計算,將所有的資料型別都使用int型別來表示。使用int型別操作方便並且不容易出現錯誤,只需要在設計陣列邊界的地方需要仔細一點。在輸入明文和金鑰時對輸入進行了設計,對不符合格式的輸入進行提醒並重新輸入。

輸入錯誤格式的明文,系統報錯,並提醒重新輸入正確的明文(明文要求小於8個byte)

輸入正確格式明文,金鑰長度不為8bytes,系統提示報錯,並重新輸入

輸入正確的明文與金鑰,產生密文,密文格式為16位16進製制字串,解密過程輸入金鑰與解密金鑰不一致,輸出亂碼

輸入正確的明文與金鑰,產生密文,密文格式為16位16進製制字串,解密過程輸入金鑰與解密金鑰一致,輸出正確的原文

des演算法主要是通過移位、置換、擴充套件、壓縮、異或等幾種常見的數**算使用金鑰對明文資料進行加密,使其成為複雜的加密密文傳送出去,從而保證明文傳輸過程中的安全性。

本次實驗個人感覺良好,基本實現了des演算法的基本要求,不過只是完成了小於八位的明文輸入,未能實現對中文輸入的加密與解密,只能簡單實現對八位ascii碼的加密與解密,對於成串的明文輸入沒有做過多的深入,在**部分將des演算法分成了main函式、置換表、位處理三部分、便於讀者**和程式檢錯。

在執行程式得到加密的結果,無法判斷自己加密的演算法是否正確,於是,根據des演算法的逆過程編寫了des演算法的解密演算法,發現自己第一次編寫des演算法時有些漏洞,人工檢錯時間花費太多。通過des演算法的逆過程可以加深一遍對des演算法的了解,更可以知道自己原先編寫des演算法出現了哪些錯誤。

接收資訊方收到密文後,通過使用加密時使用的金鑰以及des演算法的逆演算法對密文進行解密,獲得明文資料。這就要求發收信雙方使用同乙個金鑰對資料進行加密、解密。

從中我們可以發現des的某些缺點:

交易雙方使用相同的金鑰,使得交易雙方安全性得不到保證。

每次傳輸資料時使用不同的金鑰,使得金鑰管理成為負擔,對金鑰的管理,加大了成本。

隨著計算機效能的提公升,des演算法已經滿足不了現在的需求,tdes演算法,3des演算法出現

不能進行並行執行,效率低

github完整**:

DES演算法加密

public class des des演算法,加密 param data 待加密字串 param key 加密私鑰,長度不能夠小於8位 return 加密後的位元組陣列,一般結合base64編碼使用 throws cryptexception 異常 public static string enc...

簡單加密 DES演算法加密

背景 日前,由於公司乙個小專案需要加密,於是便學習 搜尋 了部分加密相關的知識,了解了一些常用加密演算法,包括常用的rsa演算法,和des演算法,突然發覺,過去幾十年年的學還是沒有白上的,學了那麼久的質數和分解,原來在加密領域是這樣強大.乾貨 1 不扯沒用的,分享乙個直接能用的加密演算法,就乙個cp...

DES加密演算法

命名空間 system.security.cryptography 定義訪問資料加密標準 des 演算法的加密服務提供程式 csp 版本的包裝物件。無法繼承此類。測試1加密頁面 protected void page load object sender,eventargs e response.r...