DES加密算法

DES加密算法

DES算法為密碼體制中的對稱密碼體制,又被成為美國數據加密標準,是1972年美國IBM公司研製的對稱密碼體制加密算法。其密鑰長度為56位,明文按64位進行分組,將分組後的明文組和56位的密鑰按位替代或交換的方法形成密文組的加密方法。DES加密算法特點:分組比較短、密鑰太短、密碼生命周期短、運算速度較慢。DES工作的基本原理是,其入口參數有三個:key、data、mode。 key為加密解密使用的密鑰,data為加密解密的數據,mode為其工作模式。當模式為加密模式時,明文按照64位進行分組,形成明文組,key用於對數據加密,當模式為解密模式時,key用於對數據解密。實際運用中,密鑰只用到了64位中的56位,這樣才具有高的安全性。DES( Data Encryption Standard)算法,於1977年得到美國政府的正式許可,是一種用56位密鑰來加密64位數據的方法。雖然56位密鑰的DES算法已經風光不在,而且常有用Des加密的明文被破譯的報導,但是了解一下昔日美國的標準加密算法總是有益的,而且目前DES算法得到了廣泛的套用,在某些場合,仍然發揮著餘熱。

密鑰生成

1 取得密鑰

從用戶處取得一個64位(本文如未特指,均指二進制位))長的密碼key ,

DES加密算法DES加密算法

去除64位密碼中作為奇偶校驗位的第8、16、24、32、40、48、56、64位,剩下的56位作為有效輸入密鑰.
DES加密算法DES加密算法

2 等分密鑰

表1.
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 50 44 36
表2.
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4

DES加密算法DES加密算法

把在1步中生成的56位輸入密鑰分成均等的A,B兩部分,每部分為28位,參照表1和表2把輸入密鑰的位值填入相應的位置. 按照表1所示A的第一位為輸入的64位密鑰的第57位,A的第2位為64位密鑰的第49位,...,依此類推,A的最後一位最後一位是64位密鑰的第36位。
3 密鑰移位

表3. i 1 2 3 4 5 6 7 8
ǿ 1 1 2 2 2 2 2 2
i 9 10 11 12 13 14 15 16
ǿ 1 2 2 2 2 2 2 1

DES算法的密鑰是經過16次疊代得到一組密鑰的,把在1.1.2步中生成的A,B視為疊代的起始密鑰,表3顯示在第i次疊代時密鑰循環左移的位數. 比如在第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)
實現接口函式的介紹

1 int des(char *data, char *key,int readlen)
參數:
1.存放待加密明文的記憶體指針(長度為readlen,可能經過填充;
2.存放用戶輸入的密鑰記憶體的指針
3.待加密明文的長度(8位元組的倍數)
功能:
生成加密密鑰,把待加密的明文數據分割成64位的塊,逐塊完成16次疊代加密,密文存放在data所指向的記憶體中.

2 int Ddes(char *data, char *key,int readlen)
參數:
1.存放待解密文的記憶體指針(長度為readlen,可能經過填充;
2.存放用戶輸入的密鑰記憶體的指針
3.待解密文的長度( 8位元組的倍數)
功能:
生成解密密鑰,把待解密文分割成64位的塊,逐塊完成16次疊代解密,解密後的明文存放在data所指向的記憶體中.

3 int des3(char *data, char *key, int n ,int readlen)
參數:
1.存放待加密明文的記憶體指針(長度為readlen,可能經過填充;
2.存放用戶輸入的密鑰記憶體的指針
3.用戶指定進行多少層加密
4.待加密明文的長度(8位元組的倍數)
功能:
生成加密密鑰,把待加密的明文分割成64位的塊,把第i-1層加密後的密文作為第i層加密的明文輸入,根據用戶指定的加密層數進行n層加密,最終生成的密文存放在data所指向的記憶體中.
說明:
用戶僅僅輸入一條密鑰,所有的加密密鑰都是由這條密鑰生成.

4 int Ddes3(char *data, char*key, int n ,int readlen)
參數:
1.存放待解密文的記憶體指針(長度為readlen,可能經過填充;
2.存放用戶輸入的密鑰記憶體的指針
3.用戶指定進行多少層解密
4.待解密文的長度(8位元組的倍數)
功能:
生成解密密鑰,把待解密文分割成64位的塊,把第i-1層解密後的"明文"作為第i層解密的密文輸入,根據用戶指定的解密層數進行n層解密,最終生成的明文存放在data所指向的記憶體中.
說明:
用戶僅僅輸入一條密鑰,所有的解密密鑰都是由這條密鑰生成.

5 int desN(char*data,char**key,int n_key,int readlen)
參數:
1.存放待加密明文的記憶體指針(長度為readlen,可能經過填充;
2.存放用戶輸入的密鑰記憶體的指針
3.用戶指定了多少條密鑰
4.待加密明文的長度(8位元組的倍數)
功能:

DES加密算法DES加密算法
生成加密密鑰,把待加密的明文分割成64位的塊,把第i-1層加密後的密文作為第i層加密的明文輸入,根據用戶指定的加密層數進行n層加密,最終生成的密文存放在data所指向的記憶體中.
說明:
這裡用戶通過輸入的密鑰條數決定加密的層數,每輪16次疊代加密所使用的加密密鑰是由用戶自定的對應密鑰生成.

6 int DdesN(char*data,char**key,intn_key,int readlen)
參數:
1.存放待解密文的記憶體指針(長度為readlen,可能經過填充;
2.存放用戶輸入的密鑰記憶體的指針
3.用戶指定了多少條密鑰
4.待解密文的長度(8位元組的倍數)
功能:
生成解密密鑰,把待解密文分割成64位的塊,把第i-1層解密後的”明文”作為第i層解密的密文輸入,根據用戶指定的解密層數進行n層解密,最終生成的明文存放在data所指向的記憶體中.
說明:
這裡用戶通過輸入的密鑰條數決定解密的層數,每輪16次疊代加密所使用的解密密鑰是由用戶自定的對應密鑰生成.

實現的介紹

利用算法核心代碼封裝的接口函式編寫了一個針對文本檔案的加密解密工具。選擇把密文以16進制的形式寫入檔案的方法.當然也可以直接寫入檔案.
例:
密文為:12345678
在記憶體中顯示為:
31 32 33 34 35 36 37 38
那么就把以3132333435363738的形式寫入檔案.
為了解密的方便,密文中的每個位元組用兩個位元組表示,也即在記憶體中顯示為0x9A的內容,就以9A的形式寫入檔案中.當記憶體中顯示的內容為0x0?(?代表0~F)形式時,需要以0?的形式寫入檔案.
這樣可以避開前面提及的問題,只是在解密時先按照兩兩組合的原則,順序把從檔案中讀取的數據轉換成待解的密文.
例:
讀出的數據是:
3132333435363738
那么復原的過程:
31->1
32->2
33->3
….
38->8
最終得真正的密文12345678,這樣就可以調用DES算法解密函式從密文得到明文.

DES加密算法DES加密算法

DES算法是對固定大小(64位)的數據塊進行加密解密操作的,對於那些不夠64位的數據塊需要採用填充機制補位到64位長,為了方便使用,數據位的填充是對用戶而言是透明的,利用該工具進行加密解密操作時,用戶只需輸入操作的類型、讀取數據的檔案名稱、寫入操作結果的檔案名稱、密鑰等信息.
操作思路:
#define READFILESIZE 512
步驟:
1.從檔案中讀取READFILESIZE個位元組的數據
2.,如果從檔案中讀出的數據少於READFILESIZE個,以0補足,然後根據用戶指定的類型對這READFILESIZE個位元組的數據進行操作.
3.判斷檔案是否結束,沒有則執行步驟1
4.把加密後的檔案實際長度添加到密文的末尾
5.結束
採用一次只從檔案讀取READFILESIZE個位元組是在為了防止由於需要加密或解密的檔案太大導致記憶體不夠的情況出現。

注意事項

DES算法的加密密鑰是根據用戶輸入的密碼生成的,該算法把64位密碼中的第8位、第16位、第24位、第32位、第40位、第48位、第56位、第64位作為奇偶校驗位,在計算密鑰時要忽略這8位.如果輸入的密碼只是在這8位上有區別的話,那么操作後的結果將是一樣的.
例:
輸入的密碼為wuzhenll,密鑰的16進制表示為77 75 7A 68 65 6E 6C 6C
任意改變這64位數據的奇偶校驗位,可以得到16個不同的密碼,
把8個奇偶檢驗位全取反後:
w->v
u->t
z->{
h->i
e->d
n->o
l->m
形成新密碼:vt{idomm
表面上新密碼和原密碼迥然不同,但是由於他們僅在奇偶校驗位上有區別,所以用這兩個密碼進行加密解密操作得到的結果是一樣的.
筆者建議使用安全係數較高的多密鑰加密解密方案.
此外用戶輸入的密碼的長度不受限制,當輸入的密碼長度為0時,使用預設64位密碼;當輸入的密碼長度大於8位元組時,輸入密碼的前8個位元組為有效密碼.
該工具提供6種不同的操作類型:

1:一層加密;
2:一層解密;

3:N層單密鑰加密;
4:N層單密鑰解密;

5:N層多密鑰加密;
6:N層多密鑰解密;

這六種操作是對稱使用的,例如:加密明文時選擇一層加密,解密時對密文使用一層解密.

相關詞條

相關搜尋

熱門詞條

聯絡我們