Verilog 语言实现 DES 算法
加密算法的高效性与严密性决定其价值,DES 算法 1977 年得到美国政府的正式许可,是
一种用 56 位密钥来加密 64 位数据的方法。虽然 56 位密钥的 DES 算法已经风光不在,而
且常有用 Des 加密的明文被破译的报道,但是了解一下昔日美国的标准加密算法总是有益
的,而且目前 DES 算法得到了广泛的应用,在某些场合,她仍然发挥着余热~
下面介绍用 Verilog 语言实现 DES 算法的部分模块:
///////////////// 加密基本模块bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/////
/////////////////
//从用户处取得一个 64 位(本文如未特指,均指二进制位))长的密码 key ,
//去除 64 位密码中作为奇偶校验位的第 8、16、24、32、40、48、56、64 位,剩下的
56 位作为有效输入密钥.
module des(desOut, desIn, vkey, dec, roundSel, clk);
output[63:0]desOut; // 64 位的密文输出
input[63:0]desIn; // 64 位的明文输入
input[55:0]vkey; // 56 位密钥
inputdec;
input[3:0]roundSel; // 加密轮数控制
inputclk;
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;
// 初始换位
assign IP[1:64] = {desIn[06], desIn[14], desIn[22], desIn[30], desIn[38],
desIn[46],......,desIn[33], desIn[41], desIn[49], desIn[57] };
assign Lout = (roundSel == 0) ? IP[33:64] : R;
assign Xin = (roundSel == 0) ? IP[01:32] : L;
// 设置并选择子密钥
vkey_sel vkey_sel1(
.K_sub(K_sub ),
.K(vkey),
.roundSel( roundSel),