于偉 黎玉香
摘 要:在對稱密碼體制中,發(fā)收雙方使用相同密鑰,有著同樣的加密密鑰和解密密鑰。在眾多的加密算法中影響最大的是DES加密算法。本文詳細(xì)介紹了DES加密的過程及其C語言實現(xiàn)。
關(guān)鍵詞:DES;密鑰;加密;C語言
0 引言
分組密碼是目前應(yīng)用較為廣泛的一種密碼體制,而DES(Data Encryption Standard)加密算法是分組密碼的典型代表,也是第一個被公布出來的加密標(biāo)準(zhǔn)算法。它是第一個將密碼算法公開的加密標(biāo)準(zhǔn),如果只知道算法但沒有正確的密鑰就不能單純的通過算法得到明文,其安全性得益于在破解密碼時計算上和時間上的復(fù)雜性。DES分組明文的長度為64位,加密階段卻沒有依照這個長度來處理,而是選擇了56位密鑰的方式來,由此生成對應(yīng)的64為密文。
1 DES加密的流程步驟
對于DES加密而言,其操作步驟可以分為兩個環(huán)節(jié):首先,是加密階段;接著就是子密鑰產(chǎn)生的階段,實現(xiàn)對于上述兩個階段的控制,可以完成加密的任務(wù)。
加密步驟如下:
(1)將明文以重新排列順序 64位分組后進(jìn)行初始置換,且分為左右兩半,各32位;
(2)兩半分別經(jīng)過16輪迭代,即進(jìn)行16次相同的變換,每輪迭代中使用置換和代換技術(shù)。16輪迭代后兩半對調(diào);
(3)在得到對應(yīng)的兩半之后,需要進(jìn)行逆初始置換,由此實現(xiàn)對應(yīng)64為密文的生成,這就是第三步驟。
子密鑰的產(chǎn)生則由56位密鑰,產(chǎn)生16個48位子密鑰,分別供左半邊的16輪迭代加密使用。
1.1 初始置換
對于分組加密,初始置換是第一步,通過一個初始置換函數(shù)DES_IP_Transform()后將64位明文分成兩部分:左半部分L0和右半部分R0各32位。
1.2 新一輪數(shù)據(jù)的生成
左右兩半再經(jīng)過16輪迭代,在每輪迭代中,使用函數(shù) memcpy()將上一輪的右邊Ri-1直接變換為本輪的左邊Li,將上一輪的右邊Ri–1通過擴(kuò)展置換函數(shù)DES_E_Transform(),由32位擴(kuò)展到48位,再與48位子密鑰經(jīng)函數(shù)DES_XOR()進(jìn)行異或運(yùn)算后,通過S盒函數(shù)DES_SBOX()壓縮成32位,經(jīng)置換函數(shù)DES_P_Transform()得到32位的加密函數(shù)F,F(xiàn)與Li–1異或后作為本輪的右邊Ri。
16輪迭代后,使用函數(shù)DES_Swap()將左右兩半交換,再經(jīng)逆初始置換函數(shù)DES_IP_1_Transform()得到64位密文。
1.3 S盒
在加密函數(shù)計算過程中使用了8個S盒,48位數(shù)據(jù)經(jīng)過8個S盒后輸出32位數(shù)據(jù),每個S盒都由4行、16列組成,定義成一個三維數(shù)組 S[8][4][16]。對于每個S盒,輸入6位,輸出4位。對于上述輸入數(shù)據(jù)進(jìn)行分析,明確最高位和最低位,以兩者為基礎(chǔ)形成對應(yīng)二進(jìn)制數(shù),由此去選擇S盒4行中的行。剩下還有4位數(shù)字,可以選擇S盒16列中的行。在上述行列選擇之后會看到行列存在交叉的部分,這就是此處要輸出的數(shù)據(jù),最后將該數(shù)據(jù)轉(zhuǎn)換為4位二進(jìn)制數(shù)。這樣,48位數(shù)據(jù)經(jīng)過8個S盒后得到了32位。
2 子密鑰產(chǎn)生
首先將56位密鑰經(jīng)過置換選擇1,這里使用函數(shù)DES_PC1_Transform()將其位置重新排列。并排列后的前28位用C0表示,后28位用D0表示,如圖1。
接下來要產(chǎn)生16個48位的子密鑰也需要經(jīng)過16輪迭代。在實際迭代的過程中,原本28位的 Ci-1和Di-1因為函數(shù)循環(huán)作用,使得其出現(xiàn)位移的情況,一般表現(xiàn)為向左移動一位或者兩位,左移位數(shù)由數(shù)組int MOVE_TIMES[16] = {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1}定義。通過移位我們可以獲取Ci和Di,接著就需要將這兩者實現(xiàn)合并,此時就可以得到對應(yīng)56位,接著以置換的方式將其原來的次序打亂,具體過程可以參見圖2,由函數(shù)DES_PC2_Transform()實現(xiàn),從56位中挑出48位作為該輪的子密鑰。
3 DES解密
DES解密過程和加密過程本質(zhì)一致,有著相同的步驟和算法,另外DES加密算法屬于對稱加密技術(shù),因此解密和加密使用相同的密鑰。不同之處在于:其一,解密時是將64位密文作為算法的輸入,其二,子密鑰在使用時是加密過程的逆序,K16是解密過程中第1輪的子密鑰,K15是第2輪的子密鑰,K1是最后一輪的子密鑰。
4 結(jié)束語
信息的加密和解密是數(shù)據(jù)傳輸中保證信息安全性和完整性的常用方法,而DES加密標(biāo)準(zhǔn)綜合使用了多種置換和代換技術(shù),具有較高的安全性,在國際上被用來作為商用保密通信和計算機(jī)通信的有效算法。該加密標(biāo)準(zhǔn)的安全性不依賴于算法本身,而取決于密鑰,是一種高效、經(jīng)濟(jì)的算法。
參考文獻(xiàn)
[1]郭亞軍,宋建華,李莉,等.信息安全原理與技術(shù)(第2版)[M].北京:清華大學(xué)出版社,2013.
[2]張潔,朱麗娟.DES加密算法分析與實現(xiàn)[J].軟件導(dǎo)刊,2007,(3):95-97.
[3]王昭,袁春.信息安全原理與應(yīng)用[M].北京:電子工業(yè)出版社,2010