資源描述:
《des算法的c語(yǔ)言實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、DES算法的C語(yǔ)言實(shí)現(xiàn):對(duì)稱密碼算法又稱單鑰或私鑰或傳統(tǒng)密碼體制,其發(fā)方和收方使用相同的密鑰,即加密密鑰和解密密鑰是相同的。在眾多的常規(guī)密碼中影響最大的是DES密碼。該文介紹DES算法的C語(yǔ)言實(shí)現(xiàn)。 關(guān)鍵詞:DES;密鑰;初始置換;逆置換 ?。篢P311:A:1009-3044(2011)10-2295-02 TheRealizationofDESAlgorithmationTechnology,DalianOceanUniversity,Dalian116023,China) Abstract:Symmetrickeycrypt
2、ography,alsocalledsinglekeyorprivatekeyortraditionalcryptography,ekey,intheothermetrickeycryptography.ThispaperdescribesDESalgorithmusingClanguage. Keyutation;inversepermutation 隨著計(jì)算機(jī)X絡(luò)不斷滲透到各個(gè)領(lǐng)域,密碼學(xué)的應(yīng)用也隨之?dāng)U大。而DES是國(guó)際上商用保密通信和計(jì)算機(jī)通信的最常用的加密算法[1]。本文重點(diǎn)介紹DES算法的C語(yǔ)言實(shí)現(xiàn)?! ?DES概述 美
3、國(guó)國(guó)家標(biāo)準(zhǔn)局(NBS)于1977年公布了由IBM公司研制的一種加密算法,并批準(zhǔn)把它作為非機(jī)要部門(mén)使用的數(shù)據(jù)加密標(biāo)準(zhǔn)(DataEncryptionStandard),簡(jiǎn)稱DES[2]?! ?程序結(jié)構(gòu)框架 該C程序有3個(gè)入口參數(shù),Data、Key和Mode。其中Key為8字節(jié)共64位,是DES算法的工作密鑰;Data也為8字節(jié)64位,是要被加密或解密的數(shù)據(jù);Mode為工作方式:等于1時(shí)為加密,等于0時(shí)為解密?! 〕绦蚴紫扔擅荑€Key通過(guò)密鑰擴(kuò)展算法得到16個(gè)子密鑰,存放在k[0]—k[15]中。然后判斷Mode的值,若Mode=0,即為解
4、密,將子密鑰數(shù)組k反置,即k[0]與k[15]互換、k[1]與k[14]互換,依此類推?! 〉玫?6個(gè)子密鑰后,對(duì)Data作初始置換IP,再將置換后的Data分成兩部分,前32位為L(zhǎng),后32位為R。然后從i=0到i=14作15輪循環(huán),每次循環(huán)作如下工作:L=R;R=L⊕F(R,k[i])。共作15輪循環(huán)而非16輪,這是因?yàn)镈ES算法中作的16輪迭代,在最后一輪并不進(jìn)行左右交換,所以把第16輪迭代在循環(huán)外單獨(dú)實(shí)現(xiàn),即在循環(huán)結(jié)束時(shí)作L=L⊕F(R,k[i])?! ∽詈蠛喜、R即得到64位輸出結(jié)果,Mode=1時(shí)輸出的是密文,Mode=0時(shí)
5、輸出的是明文。程序流程如圖1所示?! ?程序的幾個(gè)關(guān)鍵部件詳解 程序有幾個(gè)關(guān)鍵部件,分別是:子密鑰的生成,初始置換IP與其逆置換IP-1,F(xiàn)函數(shù)等[3]。以下一一作詳解?! ?.1子密鑰的生成 從用戶處得到的64位密鑰Key中,每8位為一組,每組第8位是校驗(yàn)位。在加/解密過(guò)程中,校驗(yàn)位是沒(méi)用的。所以首先將Key由縮減變換PC-1縮減到56位。具體實(shí)現(xiàn)過(guò)程如下:把PC-1表存入數(shù)組pc1中,縮減時(shí)只需循環(huán)作K[i]=Key[pc1[i]]即可(56次)。數(shù)組pc1定義如下: staticintpc1[]={ 57,49,41,33
6、,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,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}; 把置換后的密鑰分為C[0]和D[0]兩部分,各28位。從i=0開(kāi)始,分別對(duì)C[i]和D[i]進(jìn)行循環(huán)左移一到兩位的位移操作,得到C[i+1]和D[i+1]。每輪的移位量存入數(shù)組LS中。LS定義如下: staticintLS[]={1,1
7、,2,2,2,2,2,2,1,2,2,2,2,2,2,1}; 串聯(lián)C[i+1]和D[i+1],再把串聯(lián)得到的數(shù)據(jù)經(jīng)過(guò)縮減變換PC-2縮減到48位,具體實(shí)現(xiàn)同縮減變換PC-1。得到的48位數(shù)據(jù)即為子密鑰k[i]。PC-2表存在數(shù)組pc2中,數(shù)組pc2定義如下: staticintpc1[]={ 14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,
8、42,50,36,29,32}; 循環(huán)16次,便得到16個(gè)子密鑰?! ?.2初始置換IP與其逆置換IP-1 初始置換IP與其逆置換IP-1的實(shí)現(xiàn)比較簡(jiǎn)單,方法類似于生成子密鑰中的縮減變換PC-1和PC-