资源描述:
《verilog语言实现des算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Verilog语言实现DES算法加密算法的高效性与严密性决定其价值,DES算法1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法。虽然56位密钥的DES算法已经风光不在,而且常有用Des加密的明文被破译的报道,但是了解一下昔日美国的标准加密算法总是有益的,而且目前DES算法得到了广泛的应用,在某些场合,她仍然发挥着余热~下面介绍用Verilog语言实现DES算法的部分模块:///////////////// 加密基本
2、模块 ////////////////////////从用户处取得一个64位(本文如未特指,均指二进制位))长的密码key,//去除64位密码中作为奇偶校验位的第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;//加密轮数控制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; //设置并选择子密钥vkey_selvkey_sel1( .K_sub( K_sub), .K( vkey ), .roundSel(roundSel ), .dec(dec) );crpcrp1(.P(out),.R(Lo
5、ut),.K_sub(K_sub)); //调用F函数模块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 ////////////////////////////// 迭代函数块 //////////////////////////////////DES算法需要进行16次迭代,在完成16次迭代前,把第i-1次得到的的left和right的值作为第i次的输入数据,重复以上步骤,但是有一点要记住:第i次迭代要选择第i次
7、迭代生成的密钥与数据进行按位异或.为保证加密和解密的对称性,DES算法的前15次迭代每完成一次迭代都要交换left和right的值,第16次迭代不交换两者的数值.到此把32位的left和right合并成64位的Data根据表9重新调整Data的位值数据的原第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换位并扩展为48位,以便和子密钥进行异或运算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