資源描述:
《verilog語言實(shí)現(xiàn)des算法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Verilog語言實(shí)現(xiàn)DES算法加密算法的高效性與嚴(yán)密性決定其價(jià)值,DES算法1977年得到美國(guó)政府的正式許可,是一種用56位密鑰來加密64位數(shù)據(jù)的方法。雖然56位密鑰的DES算法已經(jīng)風(fēng)光不在,而且常有用Des加密的明文被破譯的報(bào)道,但是了解一下昔日美國(guó)的標(biāo)準(zhǔn)加密算法總是有益的,而且目前DES算法得到了廣泛的應(yīng)用,在某些場(chǎng)合,她仍然發(fā)揮著余熱~下面介紹用Verilog語言實(shí)現(xiàn)DES算法的部分模塊://///////////////????????????????????????????????????????加密基本
2、模塊???????????????????????????????????????????////////////////////////從用戶處取得一個(gè)64位(本文如未特指,均指二進(jìn)制位))長(zhǎng)的密碼key,//去除64位密碼中作為奇偶校驗(yàn)位的第8、16、24、32、40、48、56、64位,剩下的56位作為有效輸入密鑰.moduledes(desOut,desIn,vkey,dec,roundSel,clk);??output?[63:0]?desOut;??//64位的密文輸出input?[63:0]?desIn
3、;??//64位的明文輸入input?[55:0]?vkey;??//56位密鑰input??dec;input?[3:0]?roundSel;//加密輪數(shù)控制input??clk;wire?[1:48]?K_sub;wire?[1:64]?IP,FP;reg????[1:32]?L,R;wire?[1:32]?Xin;wire?[1:32]?Lout,Rout;wire?[1:32]?out;?????//初始換位assignIP[1:64]={?desIn[06],desIn[14],desIn[22],desI
4、n[30],desIn[38],desIn[46],......,desIn[33],desIn[41],desIn[49],desIn[57]};assignLout=(roundSel==0)?IP[33:64]:R;assignXin?=(roundSel==0)?IP[01:32]:L;?//設(shè)置并選擇子密鑰vkey_selvkey_sel1(?.K_sub(?K_sub),?.K(?vkey?),?.roundSel(roundSel?),?.dec(dec)?);crpcrp1(.P(out),.R(Lo
5、ut),.K_sub(K_sub));?//調(diào)用F函數(shù)模塊assignRout=Xin^out;assignFP={Rout,Lout};always@(posedgeclk)???????L<=#1Lout;always@(posedgeclk)???????R<=#1Rout;???????assigndesOut={?FP[40],FP[08],FP[48],FP[16],FP[56],FP[24],FP[64],FP[32],......,FP[33],FP[01],FP[41],FP[09],FP[49],
6、FP[17],FP[57],FP[25]};?????endmodule????//////////////////////////////?????????????????????????????????迭代函數(shù)塊??????????????????????????????????//////////////////////////////////DES算法需要進(jìn)行16次迭代,在完成16次迭代前,把第i-1次得到的的left和right的值作為第i次的輸入數(shù)據(jù),重復(fù)以上步驟,但是有一點(diǎn)要記住:第i次迭代要選擇第i次
7、迭代生成的密鑰與數(shù)據(jù)進(jìn)行按位異或.為保證加密和解密的對(duì)稱性,DES算法的前15次迭代每完成一次迭代都要交換left和right的值,第16次迭代不交換兩者的數(shù)值.到此把32位的left和right合并成64位的Data根據(jù)表9重新調(diào)整Data的位值數(shù)據(jù)的原第40位換到第一位,原第8位換到第二位,...,依此類推,最后的得到新的64位.Data即為密文.???module?crp(P,R,K_sub);output?[1:32]?P;input?[1:32]?R;input?[1:48]?K_sub;wire?[1:4
8、8]Temp1;wire?[1:48]Temp2;wire?[1:32]Temp3;//把R換位并擴(kuò)展為48位,以便和子密鑰進(jìn)行異或運(yùn)算assignTemp1[1:48]={?R[32],R[1],R[2],R[3],R[4],R[5],R[4],R[5],.....,R[30],R[31],R[32],R[1]};assignTemp2=Te