◆曾清揚
DES加密算法的實現(xiàn)
◆曾清揚
(華北電力大學(xué) 北京 102206)
本文首先分析了DES加密算法出現(xiàn)的背景,對DES算法進行了簡要地介紹,淺析了DES加密算法的原理,然后用DES加密算法對消息進行加解密。
DES加密算法;C++;加解密
隨著信息社會的發(fā)展,人們對信息安全越來越重視,越來越多的人開始關(guān)心在網(wǎng)絡(luò)上傳輸數(shù)據(jù)的安全性。而DES算法作為一個典型的加密算法,廣泛地應(yīng)用于各種數(shù)據(jù)加密。DES算法是從IBM 1970年初開發(fā)出的一個叫Lucifer的算法發(fā)展起來的,Lucifer是一個包含類似DES構(gòu)造模塊的代替-置換網(wǎng)絡(luò)。在DES中,函數(shù)的輸出與前一輪輸出進行異或后,作為下一輪的輸出。DES算法是一個分組加密算法,以64位為一組對數(shù)據(jù)進行加密,輸入64位明文,用DES加密后輸出64位密文。

在每一輪中,密鑰通過移位和置換選擇產(chǎn)生新一輪的子密鑰。通過E表擴展置換數(shù)據(jù),右半部分32比特擴展成48比特,與每一輪生成的48比特的子密鑰異或,通過8個S盒進行代換、選擇運算生成新的32比特數(shù)據(jù),新的32位比特再通過P盒置換一次。通過P盒輸出與數(shù)據(jù)的左半部分32比特進行異或運算,成為新的右半部分32位的數(shù)據(jù)。原來的右半部分成為新的左半部分32位的數(shù)據(jù)。每輪變換可由以下公式表示:

圖2可以表示DES加密算法的輪結(jié)構(gòu)。
關(guān)鍵函數(shù)及用途如下:
(1)IP(const int input[64],int output[64],int table[64])
初始IP置換,64比特的輸入到64比特的輸出,左右分別為32比特。
(2)Charchangetobit(const char input[],int output[],int *bits);把字符串類型轉(zhuǎn)換為整型的二進制數(shù)進行存儲,類比比特。
(3)E(const int input[32],int output[48],int table[48]) E表擴展數(shù)據(jù),將32比特擴展成為48比特。
(4)Xor(int *a,int *b,int len)進行異或操作。
(5)S(const int input[48],int output[32],int table[8][4][16]) S盒壓縮將48比特的數(shù)據(jù)壓縮成32位。
(6)P(const int input[32],int output[32],int table[32]) P盒進行置換。

圖1 DES加密算法框圖

圖2 DES加密算法的輪結(jié)構(gòu)
(7)IP_In(const int input[64],int output[64],int table[64])最后一步逆置換。
(8)PC_1(const int input[64],int output[56],int table[56])密鑰的置換選擇1。
(9)PC_2(const int input[56],int output[48],int table[48])密鑰的置換選擇2。
(10)RotateL(const int input[28],int output[28], int leftCount)密鑰循環(huán)左移。
(11)subKey(const int input[64],int Subkey[16][48])每一輪子密鑰的生成。
輸入明文以及密鑰,生成密文,效果如圖3所示。

圖3 加密實現(xiàn)效果
輸入密文以及密鑰,生成明文。效果如圖4所示。
DES加密算法較為復(fù)雜,多次運用了代換和置換的方式,實現(xiàn)起來有一定的難度。但是由于其S盒并未公開和其密鑰可以通過窮舉攻擊的方式被破解,其安全性也遭到了一定的質(zhì)疑。在DES的基礎(chǔ)上也進一步發(fā)展起來了各種DES的變型,對于DES算法我們能進一步研究其變型以及變型的安全性。

圖4 解密實現(xiàn)效果
[1][美]Bruce Schneier著,吳世忠,祝世雄,張文政等譯.應(yīng)用密碼學(xué)(第二版)[M].北京:機械工業(yè)出版社,2014,01.
[2]楊波.現(xiàn)代密碼學(xué)(第四版)[M]..北京:清華大學(xué)出版社,2017,01.
[3]余啟航,李斌勇,楊雄凱,姚瑤.DES加密算法的過程分析研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2018(02):43-44.
[4]漆世錢.基于VC++的DES加密算法實現(xiàn)[J].自動化技術(shù)與應(yīng)用,2014,33(12):25-27.