des.vhd

来自「基于 xinlinx 写的DES加密算法」· VHDL 代码 · 共 803 行 · 第 1/4 页

VHD
803
字号
      when "010010" =>  val(3 downto 0) := "1001";      when "010011" =>  val(3 downto 0) := "0101";
      when "010100" =>  val(3 downto 0) := "0011";      when "010101" =>  val(3 downto 0) := "0110";
      when "010110" =>  val(3 downto 0) := "1110";      when "010111" =>  val(3 downto 0) := "1011";
      when "011000" =>  val(3 downto 0) := "0101";      when "011001" =>  val(3 downto 0) := "0000";
      when "011010" =>  val(3 downto 0) := "0000";      when "011011" =>  val(3 downto 0) := "1110";
      when "011100" =>  val(3 downto 0) := "1100";      when "011101" =>  val(3 downto 0) := "1001";
      when "011110" =>  val(3 downto 0) := "0111";      when "011111" =>  val(3 downto 0) := "0010";
      when "100000" =>  val(3 downto 0) := "0111";      when "100001" =>  val(3 downto 0) := "0010";
      when "100010" =>  val(3 downto 0) := "1011";      when "100011" =>  val(3 downto 0) := "0001";
      when "100100" =>  val(3 downto 0) := "0100";      when "100101" =>  val(3 downto 0) := "1110";
      when "100110" =>  val(3 downto 0) := "0001";      when "100111" =>  val(3 downto 0) := "0111";
      when "101000" =>  val(3 downto 0) := "1001";      when "101001" =>  val(3 downto 0) := "0100";
      when "101010" =>  val(3 downto 0) := "1100";      when "101011" =>  val(3 downto 0) := "1010";
      when "101100" =>  val(3 downto 0) := "1110";      when "101101" =>  val(3 downto 0) := "1000";
      when "101110" =>  val(3 downto 0) := "0010";      when "101111" =>  val(3 downto 0) := "1101";
      when "110000" =>  val(3 downto 0) := "0000";      when "110001" =>  val(3 downto 0) := "1111";
      when "110010" =>  val(3 downto 0) := "0110";      when "110011" =>  val(3 downto 0) := "1100";
      when "110100" =>  val(3 downto 0) := "1010";      when "110101" =>  val(3 downto 0) := "1001";
      when "110110" =>  val(3 downto 0) := "1101";      when "110111" =>  val(3 downto 0) := "0000";
      when "111000" =>  val(3 downto 0) := "1111";      when "111001" =>  val(3 downto 0) := "0011";
      when "111010" =>  val(3 downto 0) := "0011";      when "111011" =>  val(3 downto 0) := "0101";
      when "111100" =>  val(3 downto 0) := "0101";      when "111101" =>  val(3 downto 0) := "0110";
      when "111110" =>  val(3 downto 0) := "1000";      when "111111" =>  val(3 downto 0) := "1011";
      when others   =>  val(3 downto 0) := "1011";
    end case;

    -- SBOX 7
    case din(11 downto  6) is
      when "000000" =>  val(7 downto 4) := "0100";      when "000001" =>  val(7 downto 4) := "1101";
      when "000010" =>  val(7 downto 4) := "1011";      when "000011" =>  val(7 downto 4) := "0000";
      when "000100" =>  val(7 downto 4) := "0010";      when "000101" =>  val(7 downto 4) := "1011";
      when "000110" =>  val(7 downto 4) := "1110";      when "000111" =>  val(7 downto 4) := "0111";
      when "001000" =>  val(7 downto 4) := "1111";      when "001001" =>  val(7 downto 4) := "0100";
      when "001010" =>  val(7 downto 4) := "0000";      when "001011" =>  val(7 downto 4) := "1001";
      when "001100" =>  val(7 downto 4) := "1000";      when "001101" =>  val(7 downto 4) := "0001";
      when "001110" =>  val(7 downto 4) := "1101";      when "001111" =>  val(7 downto 4) := "1010";
      when "010000" =>  val(7 downto 4) := "0011";      when "010001" =>  val(7 downto 4) := "1110";
      when "010010" =>  val(7 downto 4) := "1100";      when "010011" =>  val(7 downto 4) := "0011";
      when "010100" =>  val(7 downto 4) := "1001";      when "010101" =>  val(7 downto 4) := "0101";
      when "010110" =>  val(7 downto 4) := "0111";      when "010111" =>  val(7 downto 4) := "1100";
      when "011000" =>  val(7 downto 4) := "0101";      when "011001" =>  val(7 downto 4) := "0010";
      when "011010" =>  val(7 downto 4) := "1010";      when "011011" =>  val(7 downto 4) := "1111";
      when "011100" =>  val(7 downto 4) := "0110";      when "011101" =>  val(7 downto 4) := "1000";
      when "011110" =>  val(7 downto 4) := "0001";      when "011111" =>  val(7 downto 4) := "0110";
      when "100000" =>  val(7 downto 4) := "0001";      when "100001" =>  val(7 downto 4) := "0110";
      when "100010" =>  val(7 downto 4) := "0100";      when "100011" =>  val(7 downto 4) := "1011";
      when "100100" =>  val(7 downto 4) := "1011";      when "100101" =>  val(7 downto 4) := "1101";
      when "100110" =>  val(7 downto 4) := "1101";      when "100111" =>  val(7 downto 4) := "1000";
      when "101000" =>  val(7 downto 4) := "1100";      when "101001" =>  val(7 downto 4) := "0001";
      when "101010" =>  val(7 downto 4) := "0011";      when "101011" =>  val(7 downto 4) := "0100";
      when "101100" =>  val(7 downto 4) := "0111";      when "101101" =>  val(7 downto 4) := "1010";
      when "101110" =>  val(7 downto 4) := "1110";      when "101111" =>  val(7 downto 4) := "0111";
      when "110000" =>  val(7 downto 4) := "1010";      when "110001" =>  val(7 downto 4) := "1001";
      when "110010" =>  val(7 downto 4) := "1111";      when "110011" =>  val(7 downto 4) := "0101";
      when "110100" =>  val(7 downto 4) := "0110";      when "110101" =>  val(7 downto 4) := "0000";
      when "110110" =>  val(7 downto 4) := "1000";      when "110111" =>  val(7 downto 4) := "1111";
      when "111000" =>  val(7 downto 4) := "0000";      when "111001" =>  val(7 downto 4) := "1110";
      when "111010" =>  val(7 downto 4) := "0101";      when "111011" =>  val(7 downto 4) := "0010";
      when "111100" =>  val(7 downto 4) := "1001";      when "111101" =>  val(7 downto 4) := "0011";
      when "111110" =>  val(7 downto 4) := "0010";      when "111111" =>  val(7 downto 4) := "1100";
      when others   =>  val(7 downto 4) := "1100";
    end case;

    -- SBOX 6
    case din(17 downto 12) is
      when "000000" =>  val(11 downto 8) := "1100";      when "000001" =>  val(11 downto 8) := "1010";
      when "000010" =>  val(11 downto 8) := "0001";      when "000011" =>  val(11 downto 8) := "1111";
      when "000100" =>  val(11 downto 8) := "1010";      when "000101" =>  val(11 downto 8) := "0100";
      when "000110" =>  val(11 downto 8) := "1111";      when "000111" =>  val(11 downto 8) := "0010";
      when "001000" =>  val(11 downto 8) := "1001";      when "001001" =>  val(11 downto 8) := "0111";
      when "001010" =>  val(11 downto 8) := "0010";      when "001011" =>  val(11 downto 8) := "1100";
      when "001100" =>  val(11 downto 8) := "0110";      when "001101" =>  val(11 downto 8) := "1001";
      when "001110" =>  val(11 downto 8) := "1000";      when "001111" =>  val(11 downto 8) := "0101";
      when "010000" =>  val(11 downto 8) := "0000";      when "010001" =>  val(11 downto 8) := "0110";
      when "010010" =>  val(11 downto 8) := "1101";      when "010011" =>  val(11 downto 8) := "0001";
      when "010100" =>  val(11 downto 8) := "0011";      when "010101" =>  val(11 downto 8) := "1101";
      when "010110" =>  val(11 downto 8) := "0100";      when "010111" =>  val(11 downto 8) := "1110";
      when "011000" =>  val(11 downto 8) := "1110";      when "011001" =>  val(11 downto 8) := "0000";
      when "011010" =>  val(11 downto 8) := "0111";      when "011011" =>  val(11 downto 8) := "1011";
      when "011100" =>  val(11 downto 8) := "0101";      when "011101" =>  val(11 downto 8) := "0011";
      when "011110" =>  val(11 downto 8) := "1011";      when "011111" =>  val(11 downto 8) := "1000";
      when "100000" =>  val(11 downto 8) := "1001";      when "100001" =>  val(11 downto 8) := "0100";
      when "100010" =>  val(11 downto 8) := "1110";      when "100011" =>  val(11 downto 8) := "0011";
      when "100100" =>  val(11 downto 8) := "1111";      when "100101" =>  val(11 downto 8) := "0010";
      when "100110" =>  val(11 downto 8) := "0101";      when "100111" =>  val(11 downto 8) := "1100";
      when "101000" =>  val(11 downto 8) := "0010";      when "101001" =>  val(11 downto 8) := "1001";
      when "101010" =>  val(11 downto 8) := "1000";      when "101011" =>  val(11 downto 8) := "0101";
      when "101100" =>  val(11 downto 8) := "1100";      when "101101" =>  val(11 downto 8) := "1111";
      when "101110" =>  val(11 downto 8) := "0011";      when "101111" =>  val(11 downto 8) := "1010";
      when "110000" =>  val(11 downto 8) := "0111";      when "110001" =>  val(11 downto 8) := "1011";
      when "110010" =>  val(11 downto 8) := "0000";      when "110011" =>  val(11 downto 8) := "1110";
      when "110100" =>  val(11 downto 8) := "0100";      when "110101" =>  val(11 downto 8) := "0001";
      when "110110" =>  val(11 downto 8) := "1010";      when "110111" =>  val(11 downto 8) := "0111";
      when "111000" =>  val(11 downto 8) := "0001";      when "111001" =>  val(11 downto 8) := "0110";
      when "111010" =>  val(11 downto 8) := "1101";      when "111011" =>  val(11 downto 8) := "0000";
      when "111100" =>  val(11 downto 8) := "1011";      when "111101" =>  val(11 downto 8) := "1000";
      when "111110" =>  val(11 downto 8) := "0110";      when "111111" =>  val(11 downto 8) := "1101";
      when others   =>  val(11 downto 8) := "1101";
    end case;

    -- SBOX 5
    case din(23 downto 18) is
      when "000000" =>  val(15 downto 12) := "0010";      when "000001" =>  val(15 downto 12) := "1110";
      when "000010" =>  val(15 downto 12) := "1100";      when "000011" =>  val(15 downto 12) := "1011";
      when "000100" =>  val(15 downto 12) := "0100";      when "000101" =>  val(15 downto 12) := "0010";
      when "000110" =>  val(15 downto 12) := "0001";      when "000111" =>  val(15 downto 12) := "1100";
      when "001000" =>  val(15 downto 12) := "0111";      when "001001" =>  val(15 downto 12) := "0100";
      when "001010" =>  val(15 downto 12) := "1010";      when "001011" =>  val(15 downto 12) := "0111";
      when "001100" =>  val(15 downto 12) := "1011";      when "001101" =>  val(15 downto 12) := "1101";
      when "001110" =>  val(15 downto 12) := "0110";      when "001111" =>  val(15 downto 12) := "0001";
      when "010000" =>  val(15 downto 12) := "1000";      when "010001" =>  val(15 downto 12) := "0101";
      when "010010" =>  val(15 downto 12) := "0101";      when "010011" =>  val(15 downto 12) := "0000";
      when "010100" =>  val(15 downto 12) := "0011";      when "010101" =>  val(15 downto 12) := "1111";
      when "010110" =>  val(15 downto 12) := "1111";      when "010111" =>  val(15 downto 12) := "1010";
      when "011000" =>  val(15 downto 12) := "1101";      when "011001" =>  val(15 downto 12) := "0011";
      when "011010" =>  val(15 downto 12) := "0000";      when "011011" =>  val(15 downto 12) := "1001";
      when "011100" =>  val(15 downto 12) := "1110";      when "011101" =>  val(15 downto 12) := "1000";
      when "011110" =>  val(15 downto 12) := "1001";      when "011111" =>  val(15 downto 12) := "0110";
      when "100000" =>  val(15 downto 12) := "0100";      when "100001" =>  val(15 downto 12) := "1011";
      when "100010" =>  val(15 downto 12) := "0010";      when "100011" =>  val(15 downto 12) := "1000";
      when "100100" =>  val(15 downto 12) := "0001";      when "100101" =>  val(15 downto 12) := "1100";
      when "100110" =>  val(15 downto 12) := "1011";      when "100111" =>  val(15 downto 12) := "0111";
      when "101000" =>  val(15 downto 12) := "1010";      when "101001" =>  val(15 downto 12) := "0001";
      when "101010" =>  val(15 downto 12) := "1101";      when "101011" =>  val(15 downto 12) := "1110";
      when "101100" =>  val(15 downto 12) := "0111";      when "101101" =>  val(15 downto 12) := "0010";
      when "101110" =>  val(15 downto 12) := "1000";      when "101111" =>  val(15 downto 12) := "1101";
      when "110000" =>  val(15 downto 12) := "1111";      when "110001" =>  val(15 downto 12) := "0110";
      when "110010" =>  val(15 downto 12) := "1001";      when "110011" =>  val(15 downto 12) := "1111";
      when "110100" =>  val(15 downto 12) := "1100";      when "110101" =>  val(15 downto 12) := "0000";
      when "110110" =>  val(15 downto 12) := "0101";      when "110111" =>  val(15 downto 12) := "1001";
      when "111000" =>  val(15 downto 12) := "0110";      when "111001" =>  val(15 downto 12) := "1010";
      when "111010" =>  val(15 downto 12) := "0011";      when "111011" =>  val(15 downto 12) := "0100";
      when "111100" =>  val(15 downto 12) := "0000";      when "111101" =>  val(15 downto 12) := "0101";
      when "111110" =>  val(15 downto 12) := "1110";      when "111111" =>  val(15 downto 12) := "0011";
      when others   =>  val(15 downto 12) := "0011";
    end case;

    -- SBOX 4
    case din(29 downto 24) is
      when "000000" =>  val(19 downto 16) := "0111";      when "000001" =>  val(19 downto 16) := "1101";
      when "000010" =>  val(19 downto 16) := "1101";      when "000011" =>  val(19 downto 16) := "1000";
      when "000100" =>  val(19 downto 16) := "1110";      when "000101" =>  val(19 downto 16) := "1011";
      when "000110" =>  val(19 downto 16) := "0011";      when "000111" =>  val(19 downto 16) := "0101";
      when "001000" =>  val(19 downto 16) := "0000";      when "001001" =>  val(19 downto 16) := "0110";
      when "001010" =>  val(19 downto 16) := "0110";      when "001011" =>  val(19 downto 16) := "1111";
      when "001100" =>  val(19 downto 16) := "1001";      when "001101" =>  val(19 downto 16) := "0000";
      when "001110" =>  val(19 downto 16) := "1010";      when "001111" =>  val(19 downto 16) := "0011";
      when "010000" =>  val(19 downto 16) := "0001";      when "010001" =>  val(19 downto 16) := "0100";
      when "010010" =>  val(19 downto 16) := "0010";      when "010011" =>  val(19 downto 16) := "0111";
      when "010100" =>  val(19 downto 16) := "1000";      when "010101" =>  val(19 downto 16) := "0010";
      when "010110" =>  val(19 downto 16) := "0101";      when "010111" =>  val(19 downto 16) := "1100";
      when "011000" =>  val(19 downto 16) := "1011";      when "011001" =>  val(19 downto 16) := "0001";
      when "011010" =>  val(19 downto 16) := "1100";      when "011011" =>  val(19 downto 16) := "1010";
      when "011100" =>  val(19 downto 16) := "0100";      when "011101" =>  val(19 downto 16) := "1110";
      when "011110" =>  val(19 downto 16) := "1111";      when "011111" =>  val(19 downto 16) := "1001";
      when "100000" =>  val(19 downto 16) := "1010";      when "100001" =>  val(19 downto 16) := "0011";
      when "100010" =>  val(19 downto 16) := "0110";      when "100011" =>  val(19 downto 16) := "1111";
      when "100100" =>  val(19 downto 16) := "1001";      when "100101" =>  val(19 downto 16) := "0000";
      when "100110" =>  val(19 downto 16) := "0000";      when "100111" =>  val(19 downto 16) := "0110";
      when "101000" =>  val(19 downto 16) := "1100";      when "101001" =>  val(19 downto 16) := "1010";
      when "101010" =>  val(19 downto 16) := "1011";      when "101011" =>  val(19 downto 16) := "0001";
      when "101100" =>  val(19 downto 16) := "0111";      when "101101" =>  val(19 downto 16) := "1101";
      when "101110" =>  val(19 downto 16) := "1101";      when "101111" =>  val(19 downto 16) := "1000";
      when "110000" =>  val(19 downto 16) := "1111";      when "110001" =>  val(19 downto 16) := "1001";
      when "110010" =>  val(19 downto 16) := "0001";      when "110011" =>  val(19 downto 16) := "0100";
      when "110100" =>  val(19 downto 16) := "0011";      when "110101" =>  val(19 downto 16) := "0101";
      when "110110" =>  val(19 downto 16) := "1110";      when "110111" =>  val(19 downto 16) := "1011";
      when "111000" =>  val(19 downto 16) := "0101";      when "111001" =>  val(19 downto 16) := "1100";
      when "111010" =>  val(19 downto 16) := "0010";      when "111011" =>  val(19 downto 16) := "0111";
      when "111100" =>  val(19 downto 16) := "1000";      when "111101" =>  val(19 downto 16) := "0010";
      when "111110" =>  val(19 downto 16) := "0100";      when "111111" =>  val(19 downto 16) := "1110";
      when others   =>  val(19 downto 16) := "1110";
    end case;

    -- SBOX 3
    case din(35 downto 30) is
      when "000000" =>  val(23 downto 20) := "1010";      when "000001" =>  val(23 downto 20) := "1101";
      when "000010" =>  val(23 downto 20) := "0000";      when "000011" =>  val(23 downto 20) := "0111";
      when "000100" =>  val(23 downto 20) := "1001";      when "000101" =>  val(23 downto 20) := "0000";
      when "000110" =>  val(23 downto 20) := "1110";      when "000111" =>  val(23 downto 20) := "1001";
      when "001000" =>  val(23 downto 20) := "0110";      when "001001" =>  val(23 downto 20) := "0011";
      when "001010" =>  val(23 downto 20) := "0011";      when "001011" =>  val(23 downto 20) := "0100";
      when "001100" =>  val(23 downto 20) := "1111";      when "001101" =>  val(23 downto 20) := "0110";
      when "001110" =>  val(23 downto 20) := "0101";      when "001111" =>  val(23 downto 20) := "1010";
      when "010000" =>  val(23 downto 20) := "0001";      when "010001" =>  val(23 downto 20) := "0010";
      when "010010" =>  val(23 downto 20) := "1101";      when "010011" =>  val(23 downto 20) := "1000";
      when "010100" =>  val(23 downto 20) := "1100";      when "010101" =>  val(23 downto 20) := "0101";
      when "010110" =>  val(23 downto 20) := "0111";      when "010111" =>  val(23 downto 20) := "1110";
      when "011000" =>  val(23 downto 20) := "1011";      when "011001" =>  val(23 downto 20) := "1100";
      when "011010" =>  val(23 downto 20) := "0100";      when "011011" =>  val(23 downto 20) := "1011";
      when "011100" =>  val(23 downto 20) := "0010";      when "011101" =>  val(23 downto 20) := "1111";
      when "011110" =>  val(23 downto 20) := "1000";      when "011111" =>  val(23 downto 20) := "0001";
      when "100000" =>  val(23 downto 20) := "1101";      when "100001" =>  val(23 downto 20) := "0001";
      when "100010" =>  val(23 downto 20) := "0110";      when "100011" =>  val(23 downto 20) := "1010";
      when "100100" =>  val(23 downto 20) := "0100";      when "100101" =>  val(23 downto 20) := "1101";
      when "100110" =>  val(23 downto 20) := "1001";      when "100111" =>  val(23 downto 20) := "0000";
      when "101000" =>  val(23 downto 20) := "1000";      when "101001" =>  val(23 downto 20) := "0110";
      when "101010" =>  val(23 downto 20) := "1111";      when "101011" =>  val(23 downto 20) := "1001";
      when "101100" =>  val(23 downto 20) := "0011";      when "101101" =>  val(23 downto 20) := "1000";
      when "101110" =>  val(23 downto 20) := "0000";      when "101111" =>  val(23 downto 20) := "0111";
      when "110000" =>  val(23 downto 20) := "1011";      when "110001" =>  val(23 downto 20) := "0100";

⌨️ 快捷键说明

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