對稱加密演算法DES原理及實現

2021-10-02 15:40:16 字數 2601 閱讀 1234

des加密演算法,為對稱加密演算法中的一種。70年代初由ibm研發,後2023年被美國國家標準局採納為資料加密標準,即des全稱的由來:data encryption standard。對稱加密演算法,是相對於非對稱加密演算法而言的。兩者區別在於,對稱加密在加密和解密時使用同一金鑰,而非對稱加密在加密和解密時使用不同的金鑰,即公鑰和私鑰。常見的des、3des、aes均為對稱加密演算法,而rsa、橢圓曲線加密演算法,均為非對稱加密演算法。

des是以64位元的明文為乙個單位來進行加密的,超過64位元的資料,要求按固定的64位元的大小分組,分組有很多模式,後續單獨總結,暫時先介紹des加密演算法。des使用的金鑰長度為64位元,但由於每隔7個位元設定乙個奇偶校驗位,因此其金鑰長度實際為56位元。奇偶校驗為最簡單的錯誤檢測碼,即根據一組二進位制**中1的個數是奇數或偶數來檢測錯誤。

des的基本結構,由ibm公司的horst feistel設計,因此稱feistel網路。在feistel網路中,加密的每個步驟稱為輪,經過初始置換後的64位明文,進行了16輪feistel輪的加密過程,最後經過終結置換後形成最終的64位密文。如下為feistel網路的示意圖:

64位明文被分為左、右兩部分處理,右側資料和子金鑰經過輪函式f生成用於加密左側資料的位元序列,與左側資料異或運算,運算結果輸出為加密後的左側,右側資料則直接輸出為右側。

其中子金鑰為本輪加密使用的金鑰,每次feistel均使用不同的子金鑰。子金鑰的計算,以及輪函式的細節,稍後下文介紹。由於一次feistel輪並不會加密右側,因此需要將上一輪輸出後的左右兩側對調後,重複feistel輪的過程,des演算法共計進行16次feistel輪,最後一輪輸出後左右兩側無需對調。

des加密和解密的過程一致,均使用feistel網路實現,區別僅在於解密時,密文作為輸入,並逆序使用子金鑰。

在使用des加密前,需要自己實現對明文的補碼和去碼操作

補碼

//實現pkcs5padding補碼

func pkcs5padding(ciphertxt byte, blocksize int) byte , padding)

//拼接原文與補碼

return bytetxt

}

去碼

//pkcs5unpadding 去碼

func pkcs5unpadding(ciphertxt byte) byte

des加密

// key 必須為8位

func endesencrypt (origdata byte, key byte) byte

des解密

func dedescriypt(cript byte, key byte) byte
使用

func main()
輸出結果

加密的結果: 935ae7ca3229f6c707bb9de9db9693c7

解密後的結果為: hello world

加密

func encrypt(key string, data byte) byte 

// 對明文進行補碼

var pad = pkcs5padding(data, len(key))

//通過加法,實現簡單加密

for i := 0;i解密

func decrypt(ciphertxt byte,key string) byte {

fmt.println("???",ciphertxt)

//計算key的總和

var sum =0

for i:=0;ides是乙個經典的對稱加密演算法,但也缺陷明顯,即56位的金鑰安全性不足,已被證實可以在短時間內破解。為解決此問題,出現了3des,也稱triple des,3des為des向aes過渡的加密演算法,它使用3條56位的金鑰對資料進行三次加密。為了相容普通的des,3des並沒有直接使用加密->加密->加密

的方式,而是採用了加密->解密->加密的方式。

當三重金鑰均相同時,前兩步相互抵消,相當於僅實現了一次加密,因此可實現對普通des加密演算法的相容。

3des解密過程,與加密過程相反,即逆序使用金鑰。是以金鑰3、金鑰2、金鑰1的順序執行解密->加密->解密

相比des,3des因金鑰長度變長,安全性有所提高,但其處理速度不高。因此又出現了aes加密演算法,aes較於3des速度更快、安全性更高。

對稱加密演算法 DES加密演算法

一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...

對稱加密之DES加密演算法

演算法說明 作為des資料加密標準的演算法實現,dea data encryption algorithm 是一種被廣泛應用的基於金鑰的經典對稱分組加密演算法,這些年來,對尋找和研究該演算法的弱點進行了非常多的嘗試,使得des是現存加密演算法中被研究得最為徹底的乙個。即使在當今由於計算硬體發展飛速,...

DES加密演算法

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