⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 creatkey.txt

📁 本人从老师那里找到的3DES的算法的源代码
💻 TXT
字号:
module creatkey(sysclk,en,reset,mode,key,k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,k13,k14,k15,k16);
/*when everything is ready,the result appears on clock later*/
input en,reset,mode,sysclk;
input[64:1] key;
output[48:1] k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,k13,k14,k15,k16;
reg[4:1] st;
reg [48:1] k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,k13,k14,k15,k16;
wire[56:1] k;
reg[56:1] cd,cd0;
pc1 select(key,cd0);
assign k={cd[32],cd[29],cd[36],cd[30],cd[42],cd[46],//pc2
          cd[53],cd[34],cd[56],cd[39],cd[49],cd[44],
          cd[48],cd[33],cd[45],cd[51],cd[40],cd[30],
          cd[55],cd[47],cd[37],cd[31],cd[52],cd[41],
          cd[2],cd[13],cd[20],cd[27],cd[7],cd[16],
          cd[8],cd[26],cd[4],cd[12],cd[19],cd[23],
          cd[10],cd[21],cd[6],cd[15],cd[28],cd[3],
          cd[5],cd[1],cd[24],cd[11],cd[17],cd[14]};
always@(posedge sysclk or posedge reset)
begin
 if(reset)
   begin
   st<=4'b0000;
   end
 else if(en)
   begin
   st<=st+1'b1;
 end
end

always@(posedge sysclk or posedge reset)
begin
  if(reset)
     begin
     k1<=48'd0;
         k2<=48'd0;
     k3<=48'd0;
         k4<=48'd0;
     k5<=48'd0;
         k6<=48'd0;
     k7<=48'd0;
         k8<=48'd0;
     k9<=48'd0;
         k10<=48'd0;
     k11<=48'd0;
          k12<=48'd0;
     k13<=48'd0;
          k14<=48'd0;
     k15<=48'd0;
          k16<=48'd0;
     end
  else if(en)
    begin
      case(mode)  /*加密模式**/
        1'b0:
        begin
      case(st)
        4'd0:
         begin
               cd<={cd0[55:29],cd0[56],cd0[27:1],cd0[28]};
               k16<=k;
         end
        4'd1:
         begin
               cd<={cd[55:29],cd[56],cd[27:1],cd[28]};
               k1<=k;
         end    
        4'd2:
         begin
               cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
               k2<=k;
         end  
        4'd3:
         begin
               cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
               k3<=k;
         end  
        4'd4:
         begin
               cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
               k4<=k;
         end  
        4'd5:
         begin
               cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
               k5<=k;
         end  
        4'd6:
         begin
               cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
               k6<=k;
         end  
        4'd7:
         begin
               cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
               k7<=k;
         end  
         4'd8:
         begin
               cd<={cd[55:29],cd[56],cd[27:1],cd[28]};
               k8<=k;
         end  
         4'd9:
         begin
               cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
               k9<=k;
         end  
         4'd10:
         begin
               cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
               k10<=k;
         end  
         4'd11:
         begin
               cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
               k11<=k;
         end  
         4'd12:
         begin
               cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
               k12<=k;
         end  
         4'd13:
         begin
               cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
               k13<=k;
         end  
         4'd14:
         begin
               cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
               k14<=k;
         end  
         4'd15:
         begin
               cd<={cd[55:29],cd[56],cd[27:1],cd[28]};
               k15<=k;
         end  
     endcase
          end
         1'b1:    /*解密哪J?/
          begin
       case(st)
          4'd0:
          begin
              cd<=cd0;
              k16<=k;
          end
          4'd1:
          begin
              cd<={cd[29],cd[56:30],cd[1],cd[28:2]};
              k1<=k;
          end
          4'd2:
          begin
              cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
              k2<=k;
          end    
          4'd3:
          begin
              cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
              k3<=k;
          end   
          4'd4:
          begin
              cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
              k4<=k;
          end  
          4'd5:
          begin
              cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
              k5<=k;
          end   
          4'd6:
          begin
              cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
              k6<=k;
          end  
          4'd7:
          begin
              cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
              k7<=k;
          end    
          4'd8:
          begin
              cd<={cd[29],cd[56:30],cd[1],cd[28:2]};
              k8<=k;
          end    
          4'd9:
          begin
              cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
              k9<=k;
          end  
          4'd10:
          begin
              cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
              k10<=k;
          end   
          4'd11:
          begin
              cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
              k11<=k;
          end  
          4'd12:
          begin
              cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
              k12<=k;
          end   
          4'd13:
          begin
              cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
              k13<=k;
          end  
          4'd14:
          begin
              cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
              k14<=k;
          end   
          4'd15:
          begin
              cd<={cd[29],cd[56:30],cd[1],cd[28:2]};
              k15<=k;
          end   
       endcase
             end
          endcase
           end
end
endmodule


module pc1(in,out);
input[64:1] in;
output[56:1] out;
assign out={in[4],in[12],in[20],in[28],in[5],in[13],in[21],
            in[29],in[37],in[45],in[53],in[61],in[6],in[14],
            in[22],in[30],in[38],in[46],in[54],in[62],in[7],
            in[15],in[23],in[31],in[39],in[47],in[55],in[63],
            in[36],in[44],in[52],in[60],in[3],in[11],in[19],
            in[27],in[35],in[43],in[51],in[59],in[2],in[10],
            in[18],in[26],in[34],in[42],in[50],in[58],in[1],
            in[9],in[17],in[25],in[33],in[41],in[49],in[57]};
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -