1. 程式人生 > >DES加密演算法

DES加密演算法

  網路安全通訊中要用到兩類密碼演算法,一類是對稱密碼演算法,另一類是非對稱密碼演算法。對稱密碼演算法有時又叫傳統密碼演算法、祕密金鑰演算法或單金鑰演算法,非對稱密碼演算法也叫公開金鑰密碼演算法或雙金鑰演算法。對稱密碼演算法的加密金鑰能夠從解密金鑰中推算出來,反過來也成立。在大多數對稱演算法中,加密解密金鑰是相同的。它要求傳送者和接收者在安全通訊之前,商定一個金鑰。對稱演算法的安全性依賴於金鑰,洩漏金鑰就意味著任何人都能對訊息進行加密解密。只要通訊需要保密,金鑰就必須保密。

  對稱演算法又可分為兩類。一次只對明文中的單個位(有時對位元組)運算的演算法稱為序列演算法或序列密碼。另一類演算法是對明文的一組位進行運算,這些位組稱為分組,相應的演算法稱為分組演算法或分組密碼。現代計算機密碼演算法的典型分組長度為64位――這個長度既考慮到分析破譯密碼的難度,又考慮到使用的方便性。後來,隨著破譯能力的發展,分組長度又提高到128位或更長。
常用的採用對稱密碼術的加密方案有5個組成部分(如圖所示)


1)明文:原始資訊。
2)加密演算法:以金鑰為引數,對明文進行多種置換和轉換的規則和步驟,變換結果為密文。
3)金鑰:加密與解密演算法的引數,直接影響對明文進行變換的結果。
4)密文:對明文進行變換的結果。
5)解密演算法:加密演算法的逆變換,以密文為輸入、金鑰為引數,變換結果為明文。

2.對稱密碼常用的數學運算
  對稱密碼當中有幾種常用到的數學運算。這些運算的共同目的就是把被加密的明文數碼儘可能深地打亂,從而加大破譯的難度。

◆移位和迴圈移位
  移位就是將一段數碼按照規定的位數整體性地左移或右移。迴圈右移就是當右移時,把數碼的最後的位移到數碼的最前頭,迴圈左移正相反。例如,對十進位制數碼12345678迴圈右移1位(十進位制位)的結果為81234567,而迴圈左移1位的結果則為23456781。
◆置換

  就是將數碼中的某一位的值根據置換表的規定,用另一位代替。它不像移位操作那樣整齊有序,看上去雜亂無章。這正是加密所需,被經常應用。
◆擴充套件
  就是將一段數碼擴充套件成比原來位數更長的數碼。擴充套件方法有多種,例如,可以用置換的方法,以擴充套件置換表來規定擴充套件後的數碼每一位的替代值。
◆壓縮
  就是將一段數碼壓縮成比原來位數更短的數碼。壓縮方法有多種,例如,也可以用置換的方法,以表來規定壓縮後的數碼每一位的替代值。
◆異或
  這是一種二進位制布林代數運算。異或的數學符號為⊕ ,它的運演算法則如下:
1⊕1 = 0 
0⊕0 = 0 
1⊕0 = 1 
0⊕1 = 1 
  也可以簡單地理解為,參與異或運算的兩數位如相等,則結果為0,不等則為1。
◆迭代

  迭代就是多次重複相同的運算,這在密碼演算法中經常使用,以使得形成的密文更加難以破解。

3.DES演算法簡介
  下面我們將介紹一種流行的對稱密碼演算法DES。

  DES是Data Encryption Standard(資料加密標準)的縮寫。它是由IBM公司研製的一種對稱密碼演算法,美國國家標準局於1977年公佈把它作為非機要部門使用的資料加密標準,三十年來,它一直活躍在國際保密通訊的舞臺上,扮演了十分重要的角色。

  DES是一個分組加密演算法,典型的DES以64位為分組對資料加密,加密和解密用的是同一個演算法。它的金鑰長度是56位(因為每個第8 位都用作奇偶校驗),金鑰可以是任意的56位的數,而且可以任意時候改變。其中有極少數被認為是易破解的弱金鑰,但是很容易避開它們不用。所以保密性依賴於金鑰。

DES加密的演算法框架如下:
  首先要生成一套加密金鑰,從使用者處取得一個64位長的密碼口令,然後通過等分、移位、選取和迭代形成一套16個加密金鑰,分別供每一輪運算中使用。

  DES對64位(bit)的明文分組M進行操作,M經過一個初始置換IP,置換成m0。將m0明文分成左半部分和右半部分m0 = (L0,R0),各32位長。然後進行16輪完全相同的運算(迭代),這些運算被稱為函式f,在每一輪運算過程中資料與相應的金鑰結合。

  在每一輪中,金鑰位移位,然後再從金鑰的56位中選出48位。通過一個擴充套件置換將資料的右半部分擴充套件成48位,並通過一個異或操作替代成新的48位資料,再將其壓縮置換成32位。這四步運算構成了函式f。然後,通過另一個異或運算,函式f的輸出與左半部分結合,其結果成為新的右半部分,原來的右半部分成為新的左半部分。將該操作重複16次。

  經過16輪迭代後,左,右半部分合在一起經過一個末置換(資料整理),這樣就完成了加密過程。 
加密流程如圖所示。


DES解密過程:
  在瞭解了加密過程中所有的代替、置換、異或和迴圈迭代之後,讀者也許會認為,解密演算法應該是加密的逆運算,與加密演算法完全不同。恰恰相反,經過密碼學家精心設計選擇的各種操作,DES獲得了一個非常有用的性質:加密和解密使用相同的演算法!

  DES加密和解密唯一的不同是金鑰的次序相反。如果各輪加密金鑰分別是K1,K2,K3…K16,那麼解密金鑰就是K16,K15,K14…K1。這也就是DES被稱為對稱演算法的理由吧。

  至於對稱密碼為什麼能對稱? DES具體是如何操作的?本文附錄中將做進一步介紹,有興趣的讀者不妨去讀一讀探個究竟。

4.DES演算法的安全性和發展
  DES的安全性首先取決於金鑰的長度。金鑰越長,破譯者利用窮舉法搜尋金鑰的難度就越大。目前,根據當今計算機的處理速度和能力,56位長度的金鑰已經能夠被破解,而128位的金鑰則被認為是安全的,但隨著時間的推移,這個數字也遲早會被突破。

  另外,對DES演算法進行某種變型和改進也是提高DES演算法安全性的途徑。

  例如後來演變出的3-DES演算法使用了3個獨立金鑰進行三重DES加密,這就比DES大大提高了安全性。如果56位DES用窮舉搜尋來破譯需要2∧56次運算,而3-DES 則需要2∧112次。

  又如,獨立子金鑰DES由於每輪都使用不同的子金鑰,這意味著其金鑰長度在56位的基礎上擴大到768位。DES還有DESX、CRYPT、GDES、RDES等變型。這些變型和改進的目的都是為了加大破譯難度以及提高密碼運算的效率。
___________________________________________________
附錄:DES的實際操作
A.金鑰生成

第A-1步 取得金鑰
  從使用者處取得一個64位(本文均指二進位制位))長的密碼口令key ,
  去除64位密碼中作為奇偶校驗位的第8、16、24、32、40、48、56、64位,剩下的56位作為有效輸入金鑰。

第A-2步 等分金鑰
表1:
輸入金鑰位序/ A位序對照表

注:表中每個單元格的數字是輸入金鑰位序,每個單元格的位置排序就是A位序,從左向右排,排完一行接著排下一行。

表2:
輸入金鑰位序/ B位序對照表

  把在第A-1步中生成的56位輸入金鑰分成均等的A、B兩部分,每部分為28位。不是簡單地前後一分為二,而是參照表1和表2把輸入金鑰的位值填入相應的位置。 按照表1所示,A的第一位為輸入的64位金鑰的第57位,A的第2位為64位金鑰的第49位,……,依此類推,A的最後一位第28位是64位金鑰的第36位。這樣,形成了A、B兩部分:


第A-3步 金鑰移位
表3:
每次迭代時金鑰迴圈
左移的位數

  DES演算法的金鑰是經過16次迭代(迴圈左移)得到一組金鑰的,把在第A-1步中生成的A、B視為迭代的起始金鑰,表3顯示每一次迭代時金鑰迴圈左移的位數。 比如在第1次迭代時金鑰迴圈左移1位,第3次迭代時金鑰迴圈左移2位。

  第9次迭代時金鑰迴圈左移1位,第14次迭代時金鑰迴圈左移2位。

第一次迭代:
A(1) =(1) A
B(1) =(1) B
第i次迭代:
A(i) =(i) A(i-1)
B(i) =(i) B(i-1)
第A-4步 金鑰的選取
在第A-3步中第i次迭代生成的兩個28位長的金鑰為



合併,得:


表4:
56位金鑰C的位序與加密金鑰K的位序對照表

  按照表4所示k的第一位為56位金鑰的第14位,k的第2位為56位金鑰的第17位,。。。,依此類推,k的最後一位第48位是56位金鑰的第32位。 這樣,就生成了一個48位使用金鑰:

  這個金鑰在加密運算中將與進行第i次迭代加密的資料進行按位異或。

第A-5步 迭代
  DES演算法金鑰生成需要進行16次迭代,在完成16次迭代前,迴圈執行第A-3步和第A-4步,最終形成16套加密金鑰:key[0],key[1],key[2],…。key[14],key[15]。

B. 資料的加密操作

第B-1步 取得資料
  把明文資料分成64位的資料塊,不夠64位的資料塊以適當的方式補足。

第B-2步 初始換位置換
表5:初始置換表

注:表中每個單元格的位置排序是新資料的位序。下同。

  按照表5所示把輸入的64位資料的原第58位換到第一位,原第50位換到第二位,依此類推,。。。,原第7位換到第64位。最後的得到新的64位資料。

OldData newData 


第B-3步 資料擴充套件
表6: 資料擴充套件對照表(輸入資料位序/生成新資料位序)

  第一次迭代以第B-2步中生成的newRata作為輸入資料,第i (i > 1)次迭代以第i-1次的64位輸出資料為輸入資料,把64位資料按位置等分成左右兩部分: 

  保持left不變,根據表6把right由32位擴充套件置換成48位。在資料擴充套件操作中,有些輸入資料位(如第1、4、5、17、28、29、32……等數位)用了兩次,因此資料得到了擴充套件。這樣得到右半部分為:  把擴充套件後的48位right與第i次迭代生成的48位加密金鑰進行按位異或操作形成一個新的48位的right。

第B-4步 資料壓縮
表7.1:資料壓縮置換表(藍色欄內是置換前的十進位制數字,白色欄內是置換後的16進位制數字)

表7.2

表7.3 至表7.8與上表形式完全相同,僅數值不同,為節省篇幅從略不表。 

  在B-3步中形成了48位的right值,

  需要把48位的right值轉換成32位的right值。置換的方法如下:
第一步,先把right視為由8個6位二進位制塊組成, 即

a,b…. h都是6位二進位制數,轉換成10進位制整數的值應當都不大於64。

  第二步,a,b…h轉換成10進位制整數後,在對應的表中根據轉換後整數值取得對應位置的替代值。這些替代值都是一個16進位制的個位數,因此,每個替代值只佔有二進位制數4位。

  轉換時各查各表:
  a對應表7.1;b對應表7.2;c對應表7.3;d對應表7.4;e對應表7.5;f對應表7.6;g對應表7.7;h對應表7.8。
  比如:
  a = 32 ,則到表7.1中找到32的位置,把對應的替代值16進位制的8賦給a ;
  b = 53 ,則到表7.2中找到的位置,把對應的替代值16進位制的c賦給b ;
  g = 16, 則到表7.7中找到16的位置,把對應的替代值16進位制的a賦給g ;
  這樣,每6位用一個4位替換,就完成了從48位向32位資料的壓縮置換。

 

  有些資料中介紹6位轉4位的實現方法與本文所採用的不同,但殊途同歸,最終的目的是相同的。

第B-5步 資料換位置換
表8


把第B-4步形成的32位right
 
根據表8進行轉換:
  資料的原第16位換到第一位,原第7位換到第二位,……,依此類推,最後得到新的32位資料。


第B-6步 交換資料
  把right 和left按位異或後的值賦給right,然後將本輪輸入的原始right值賦給left。

第B-7步 迭代
  RES演算法需要進行16次迭代,在完成16次迭代前,把第i-1次得到的的left和right的值作為第i次的輸入資料,重複第B-3步到第B-6步的步驟。但是有一點要記住:在步驟第B-3中第i次迭代要選擇第i次迭代生成的金鑰與資料進行按位異或。

第B-8步 資料整理
表9

  為保證加密和解密的對稱性,RES演算法的前15次迭代每完成一次迭代都要交換left和right的值,第16次迭代不交換兩者的數值。

  到此,把32位的left和right合併成64位的Data:

  根據表9重新調整Data的位值,資料的原第40位換到第一位,原第8位換到第二位,。。。,依此類推,最後得到新的64位。 

  好了,經過了這麼多次的數學運算,我們最終得到的Data即為密文。

C 資料的解密操作
  資料解密的演算法與加密演算法相同,區別在於第B-3步中和資料進行按位異或的金鑰的使用順序不同,在加密中是按照第i次迭代就採用第i次迭代生成的金鑰進行異或,而解密時第i次迭代就採用第17-i次迭代生成的金鑰和資料進行異或。

相關推薦

DES加密演算法的java實現(基於java類庫)

嗯嗯........這個是我新開的部落格上的第一篇的文章,這裡小白希望自己的技術能夠一天比一天好(p≧w≦q),加油! 好吧,現在來一個基於java類庫的DES加密演算法的實現吧~網上不少的程式碼要不執行有問題,要不就是簡簡單單內建一個固定的加密字串就簡單完事了。好吧,我承認我現在是為懶人服務

Des 加密演算法java工具類

package com.lock.demo.service; import org.apache.tomcat.util.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.SecretKey; import ja

DES加密演算法Golang實現

DES介紹 資料加密標準(英語:Data Encryption Standard,縮寫為 DES)是一種對稱金鑰加密塊密碼演算法,1976年被美國聯邦政府的國家標準局確定為聯邦資料處理標準(FIPS),隨後在國際上廣泛流傳開來。它基於使用56位金鑰的對稱演算法。

[Python]實現DES加密演算法和3DES加密演算法

pyDes.py ############################################################################# # Documentation

加密演算法------DES加密演算法詳解

一、加密演算法的分類1.對稱加解密演算法a.通訊雙方同時掌握一個金鑰,加密解密都是由一個金鑰完成的(即加密金鑰等於解密金鑰,加解密金鑰可以相互推倒出來)。b.雙方通訊前共同擬定一個金鑰,不對第三方公開。c.不具有個體原子性,一個金鑰被共享,洩漏機率增大2.公私鑰加解密演算法a

php的DES加密演算法

yii框架的DES程式碼 <?php /** *@see Yii CSecurityManager; */ class Des{ public static function encrypt($data,$key){ $module=mcr

DES加密演算法詳解

在網上搜了一下關於DES的說明,發現有些雜亂,所以還是有必要整合一下。 寫了一點程式碼,還沒有完成,不過,還不能編譯通過,^_^ 剛看了一下,發現還是說得夠模糊的,有機會再整理一下。 昏倒,一直執行不對,今天才仔細查出來,原來問題是出在Des_Data_P(const _b3

DES加密演算法

  網路安全通訊中要用到兩類密碼演算法,一類是對稱密碼演算法,另一類是非對稱密碼演算法。對稱密碼演算法有時又叫傳統密碼演算法、祕密金鑰演算法或單金鑰演算法,非對稱密碼演算法也叫公開金鑰密碼演算法或雙金鑰演算法。對稱密碼演算法的加密金鑰能夠從解密金鑰中推算出來,反過來也成立。在大多數對稱演算法中,加密解密金

DES加密演算法(密文只有字串和數字)

因為最近在做一個系統,系統需要有個能展示一個數據頁面在大螢幕上,而這個頁面的資料是和每個使用者掛鉤的。但是要求又不能讓使用者看到URL地址上的使用者的個人ID。 之前用了BASE64的加密演算法,對ID進行加密,後來發現密文中有%的字元出現,偶爾會出現無法解密

Feistel網路結構與DES加密演算法的框架簡單分析

通常我們耳熟能詳的幾種加密演算法: 對稱金鑰/私鑰金鑰:DES、RC6、AES(Rijndael) 非對稱祕鑰/公鑰金鑰:RSA 單向雜湊函式:MD5、SHA 對於對稱金鑰與非對稱祕鑰加密演算法來說,其區別在於加密金鑰與解密祕鑰。若加密祕鑰與解密祕鑰相同

OC des加密演算法演算法實現

效果圖: 1.雙方約定好祕鑰 2.加密utl // // EncryptUtl.m // L22test // // Created by Liyanjun on 16/7/13. // Copyright © 2016年 Liyanjun. All right

DES加密演算法細解

enc = Cipher.getInstance("DES/CBC/PKCS5Padding"); keySpec = new SecretKeySpec(key, "DES");//key ivSpec = new IvParameterSpec(iv);//iv enc.init(Cipher.ENC

支援中文輸出的DES加密演算法(JS版)

{ //declaring this locally speeds things up a bitvar spfunction1=new Array(0x1010400,0,0x10000,0x1010404,0x1010004,0x10404,0x4,0x10000,0x400,0x1010400,0x10

DES 加密演算法原理

  DES加密演算法是由 IBM 研究在1977年提出的。使用64位(bit)的資料進行加密和解密的,所用的金鑰也是64位。並被美國國家標準局宣佈為資料加密標準DES,主要用於非國家保密機關。

基於java類庫的DES加密演算法實現

真正的核心程式碼就是呼叫java類庫實現的那部分 加密部分核心程式碼 //Cipher物件實際完成加密操作 Cipher cipher = Cipher.getInstance("DES"); //用密匙初始化Cipher物件,ENCRYPT_MODE用於

S-DES加密演算法介紹與實現

為了更好地理解DES演算法,美國聖克拉拉大學的Edward Schaefer教授於1996年開發了Simplfied DES方案,簡稱S-DES方案。它是一個供教學而非安全使用的加密演算法,它與DES的特性和結構類似,但引數小,明文分組為8位,主金鑰分組為10位

Des 加密演算法

1、對稱加密演算法 1.1 定義 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,資料發信方將明文(原始資料)和加密金鑰(mi yue)一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用

加密演算法總結 加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用

加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用 加密技術通常分為兩大類:"對稱式"和"非對稱式"。 對稱性加密演算法:對稱式加密就是加密和解密使用同一個金鑰。資訊接收雙方都需事先知道密匙和加解密演算法且其密匙是相同的,之後便是對資料進行加解密了。對稱加密演算法用

加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用, 各種加密演算法比較

加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用 - sochishun - 部落格園 https://www.cnblogs.com/sochishun/p/7028056.html     加密演算法(DES,AES,RSA,MD

c# AES DES MD5加密演算法

MD5加密封裝   MD5常用加密FormsAuthentication.HashPasswordForStoringInConfigFile在Net Freamwork4.5以後就不在支援,下面整理了32位或16位下的幾個方法,以及不同寫法,最後一個由從老版本遷移過來,後續淘汰不用。 us