📄 aes encryption.txt
字号:
"10111110" WHEN "00100010", --(X"BE")
"10100001" WHEN "00100011", --(X"A1")
"11111100" WHEN "00100100", --(X"FC")
"11100011" WHEN "00100101", --(X"E3")
"11000010" WHEN "00100110", --(X"C2")
"11011101" WHEN "00100111", --(X"DD")
"01111000" WHEN "00101000", --(X"78")
"01100111" WHEN "00101001", --(X"67")
"01000110" WHEN "00101010", --(X"46")
"01011001" WHEN "00101011", --(X"59")
"00000100" WHEN "00101100", --(X"04")
"00011011" WHEN "00101101", --(X"1B")
"00111010" WHEN "00101110", --(X"3A")
"00100101" WHEN "00101111", --(X"25")
--the 4st group
"01110001" WHEN "00110000", --(X"71")
"01101110" WHEN "00110001", --(X"6E")
"01001111" WHEN "00110010", --(X"4F")
"01010000" WHEN "00110011", --(X"50")
"00001101" WHEN "00110100", --(X"0D")
"00010010" WHEN "00110101", --(X"12")
"00110011" WHEN "00110110", --(X"33")
"00101100" WHEN "00110111", --(X"2C")
"10001001" WHEN "00111000", --(X"89")
"10010110" WHEN "00111001", --(X"96")
"10110111" WHEN "00111010", --(X"B7")
"10101000" WHEN "00111011", --(X"A8")
"11110101" WHEN "00111100", --(X"F5")
"11101010" WHEN "00111101", --(X"EA")
"11001011" WHEN "00111110", --(X"CB")
"11010100" WHEN "00111111", --(X"D4")
--the 5st group
"10100100" WHEN "01000000", --(X"A4")
"10111011" WHEN "01000001", --(X"BB")
"10011010" WHEN "01000010", --(X"9A")
"10000101" WHEN "01000011", --(X"85")
"11011000" WHEN "01000100", --(X"D8")
"11000111" WHEN "01000101", --(X"C7")
"11100110" WHEN "01000110", --(X"E6")
"11111001" WHEN "01000111", --(X"F9")
"01011100" WHEN "01001000", --(X"5C")
"01000011" WHEN "01001001", --(X"43")
"01100010" WHEN "01001010", --(X"62")
"01111101" WHEN "01001011", --(X"7D")
"00100000" WHEN "01001100", --(X"20")
"00111111" WHEN "01001101", --(X"3F")
"00011110" WHEN "01001110", --(X"1E")
"00000001" WHEN "01001111", --(X"01")
--the 6st group
"01010101" WHEN "01010000", --(X"55")
"01001010" WHEN "01010001", --(X"4A")
"01101011" WHEN "01010010", --(X"6B")
"01110100" WHEN "01010011", --(X"74")
"00101001" WHEN "01010100", --(X"29")
"00110110" WHEN "01010101", --(X"36")
"00010111" WHEN "01010110", --(X"17")
"00001000" WHEN "01010111", --(X"08")
"10101101" WHEN "01011000", --(X"AD")
"10110010" WHEN "01011001", --(X"B2")
"10010011" WHEN "01011010", --(X"93")
"10001100" WHEN "01011011", --(X"8C")
"11010001" WHEN "01011100", --(X"D1")
"11001110" WHEN "01011101", --(X"CE")
"11101111" WHEN "01011110", --(X"EF")
"11110000" WHEN "01011111", --(X"F0")
--the 7st group
"01001111" WHEN "01100000", --(X"47")
"01011000" WHEN "01100001", --(X"58")
"01111001" WHEN "01100010", --(X"79")
"01100110" WHEN "01100011", --(X"66")
"00111011" WHEN "01100100", --(X"3B")
"00100100" WHEN "01100101", --(X"24")
"00000101" WHEN "01100110", --(X"05")
"00011010" WHEN "01100111", --(X"1A")
"10111111" WHEN "01101000", --(X"BF")
"10100000" WHEN "01101001", --(X"A0")
"10000001" WHEN "01101010", --(X"81")
"10011110" WHEN "01101011", --(X"9E")
"11000011" WHEN "01101100", --(X"C3")
"11011100" WHEN "01101101", --(X"DC")
"11111101" WHEN "01101110", --(X"FD")
"11100010" WHEN "01101111", --(X"E2")
--the 8st group
"10110110" WHEN "01110000", --(X"B6")
"10101001" WHEN "01110001", --(X"A9")
"10001000" WHEN "01110010", --(X"88")
"10010111" WHEN "01110011", --(X"97")
"11001010" WHEN "01110100", --(X"CA")
"11010101" WHEN "01110101", --(X"D5")
"11110100" WHEN "01110110", --(X"F4")
"11101011" WHEN "01110111", --(X"EB")
"01001110" WHEN "01111000", --(X"4E")
"01010001" WHEN "01111001", --(X"51")
"01110000" WHEN "01111010", --(X"70")
"01101111" WHEN "01111011", --(X"6F")
"00110010" WHEN "01111100", --(X"32")
"00101101" WHEN "01111101", --(X"2D")
"00001100" WHEN "01111110", --(X"0C")
"00010011" WHEN "01111111", --(X"13")
--the 9st group
"11101100" WHEN "10000000", --(X"EC")
"11110011" WHEN "10000001", --(X"F3")
"11010010" WHEN "10000010", --(X"D2")
"11001101" WHEN "10000011", --(X"CD")
"10010000" WHEN "10000100", --(X"90")
"10001111" WHEN "10000101", --(X"8F")
"10101110" WHEN "10000110", --(X"AE")
"10110001" WHEN "10000111", --(X"B1")
"00010100" WHEN "10001000", --(X"14")
"00001011" WHEN "10001001", --(X"0B")
"00101010" WHEN "10001010", --(X"2A")
"00110101" WHEN "10001011", --(X"35")
"01101000" WHEN "10001100", --(X"68")
"01110111" WHEN "10001101", --(X"77")
"01010110" WHEN "10001110", --(X"56")
"01001001" WHEN "10001111", --(X"49")
--the 10st group
"00011101" WHEN "10010000", --(X"1D")
"00000010" WHEN "10010001", --(X"02")
"00100011" WHEN "10010010", --(X"23")
"00111100" WHEN "10010011", --(X"3C")
"01100001" WHEN "10010100", --(X"61")
"01111110" WHEN "10010101", --(X"7E")
"01011111" WHEN "10010110", --(X"5F")
"01000000" WHEN "10010111", --(X"40")
"11100101" WHEN "10011000", --(X"E5")
"11111010" WHEN "10011001", --(X"FA")
"11011011" WHEN "10011010", --(X"DB")
"11000100" WHEN "10011011", --(X"C4")
"10011001" WHEN "10011100", --(X"99")
"10000110" WHEN "10011101", --(X"86")
"10100111" WHEN "10011110", --(X"A7")
"10111000" WHEN "10011111", --(X"B8")
--the 11th group
"00001111" WHEN "10100000", --(X"0F")
"00010000" WHEN "10100001", --(X"10")
"00110001" WHEN "10100010", --(X"31")
"00101110" WHEN "10100011", --(X"2E")
"01110011" WHEN "10100100", --(X"73")
"01101100" WHEN "10100101", --(X"6C")
"01001101" WHEN "10100110", --(X"4D")
"01010010" WHEN "10100111", --(X"52")
"11110111" WHEN "10101000", --(X"F7")
"11101000" WHEN "10101001", --(X"E8")
"11001001" WHEN "10101010", --(X"C9")
"11010110" WHEN "10101011", --(X"D6")
"10001011" WHEN "10101100", --(X"8B")
"10010100" WHEN "10101101", --(X"94")
"10110101" WHEN "10101110", --(X"B5")
"10101010" WHEN "10101111", --(X"AA")
--the 12th group
"11111110" WHEN "10110000", --(X"FE")
"11100001" WHEN "10110001", --(X"E1")
"11000000" WHEN "10110010", --(X"C0")
"11011111" WHEN "10110011", --(X"DF")
"10000010" WHEN "10110100", --(X"82")
"10011101" WHEN "10110101", --(X"9D")
"10111100" WHEN "10110110", --(X"BC")
"10100011" WHEN "10110111", --(X"A3")
"00000110" WHEN "10111000", --(X"06")
"00011001" WHEN "10111001", --(X"19")
"00111000" WHEN "10111010", --(X"38")
"00100111" WHEN "10111011", --(X"27")
"01111010" WHEN "10111100", --(X"7A")
"01100101" WHEN "10111101", --(X"65")
"01000100" WHEN "10111110", --(X"44")
"01011011" WHEN "10111111", --(X"5B")
--the 13th group
"00101011" WHEN "11000000", --(X"2B")
"00110100" WHEN "11000001", --(X"34")
"00010101" WHEN "11000010", --(X"15")
"00001010" WHEN "11000011", --(X"0A")
"01010111" WHEN "11000100", --(X"57")
"01001000" WHEN "11000101", --(X"48")
"01101001" WHEN "11000110", --(X"69")
"01110110" WHEN "11000111", --(X"76")
"11010011" WHEN "11001000", --(X"D3")
"11001100" WHEN "11001001", --(X"CC")
"11101101" WHEN "11001010", --(X"ED")
"11110010" WHEN "11001011", --(X"F2")
"10101111" WHEN "11001100", --(X"AF")
"10110000" WHEN "11001101", --(X"B0")
"10010001" WHEN "11001110", --(X"91")
"10001110" WHEN "11001111", --(X"8E")
--the 14th group
"11011010" WHEN "11010000", --(X"DA")
"11000101" WHEN "11010001", --(X"C5")
"11100100" WHEN "11010010", --(X"E4")
"11111000" WHEN "11010011", --(X"F8")
"10100110" WHEN "11010100", --(X"A6")
"10111001" WHEN "11010101", --(X"B9")
"10011000" WHEN "11010110", --(X"98")
"10000111" WHEN "11010111", --(X"87")
"00100010" WHEN "11011000", --(X"22")
"00111101" WHEN "11011001", --(X"3D")
"00011100" WHEN "11011010", --(X"1C")
"00000011" WHEN "11011011", --(X"03")
"01011110" WHEN "11011100", --(X"5E")
"01000001" WHEN "11011101", --(X"41")
"01100000" WHEN "11011110", --(X"60")
"01111111" WHEN "11011111", --(X"7F")
--the 15th group
"11001000" WHEN "11100000", --(X"C8")
"11010111" WHEN "11100001", --(X"D7")
"11110110" WHEN "11100010", --(X"F6")
"11101001" WHEN "11100011", --(X"E9")
"10110100" WHEN "11100100", --(X"B4")
"10101011" WHEN "11100101", --(X"AB")
"10001010" WHEN "11100110", --(X"8A")
"10010101" WHEN "11100111", --(X"95")
"00110000" WHEN "11101000", --(X"30")
"00101111" WHEN "11101001", --(X"2F")
"00001110" WHEN "11101010", --(X"0E")
"00010001" WHEN "11101011", --(X"11")
"01001100" WHEN "11101100", --(X"4C")
"01010011" WHEN "11101101", --(X"53")
"01110010" WHEN "11101110", --(X"72")
"01101101" WHEN "11101111", --(X"6D")
--the 16th group
"00111001" WHEN "11110000", --(X"39")
"00100110" WHEN "11110001", --(X"26")
"00000111" WHEN "11110010", --(X"07")
"00011000" WHEN "11110011", --(X"18")
"01000101" WHEN "11110100", --(X"45")
"01011010" WHEN "11110101", --(X"5A")
"01111011" WHEN "11110110", --(X"7B")
"01100100" WHEN "11110111", --(X"64")
"11000001" WHEN "11111000", --(X"C1")
"11011110" WHEN "11111001", --(X"DE")
"11111111" WHEN "11111010", --(X"FF")
"11100000" WHEN "11111011", --(X"E0")
"10111101" WHEN "11111100", --(X"BD")
"10100010" WHEN "11111101", --(X"A2")
"10000011" WHEN "11111110", --(X"83")
"10011100" WHEN "11111111", --(X"9C")
"XXXXXXXX" WHEN OTHERS;
end Behavioral;
--s_box_4模块
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use work.all;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity s_box_4 is
PORT(
s_word_in : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
s_word_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
);
end s_box_4;
architecture Behavioral of s_box_4 is
COMPONENT s_box
--component instantiation
PORT(
s_box_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
s_box_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END COMPONENT;
BEGIN
--generating 4 s-boxes
sboxes: FOR i IN 3 DOWNTO 0 GENERATE
sbox_map: s_box
PORT MAP(
s_box_in => s_word_in(8*i+7 downto 8*i),
s_box_out => s_word_out(8*i+7 downto 8*i)
);
END GENERATE sboxes;
end Behavioral;
--shift_row
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity shift_row is
PORT(
shiftrow_in : IN STD_LOGIC_VECTOR(127 DOWNTO 0);
shiftrow_out : OUT STD_LOGIC_VECTOR(127 DOWNTO 0)
);
end shift_row;
architecture Behavioral of shift_row is
TYPE matrix_index is array (15 downto 0) of std_logic_vector(7 downto 0);
SIGNAL b, c : matrix_index;
BEGIN
--changing 128 bits to 16 bytes in order to fit the formation of the function
matrix_mapping:
PROCESS(shiftrow_in)
BEGIN
FOR i IN 15 DOWNTO 0 LOOP
b(15-i) <= shiftrow_in(8*i+7 DOWNTO 8*i);
END LOOP;
END PROCESS matrix_mapping;
--shift row transformation
-- b(i) --> c(i)
--
-- |a b c d | |a b c d | (no shift)
-- |e f g h | ==> |f g h e | ( 1 left shift)
-- |i j k l | |k l i j | ( 2 left shift)
-- |m n o p | |m n o p | ( 4 left shift)
--shifted 1st column
c(0) <= b(0);
c(1) <= b(5);
c(2) <= b(10);
c(3) <= b(3);
--shifted 2st column
c(4) <= b(4);
c(5) <= b(9);
c(6) <= b(14);
c(7) <= b(7);
--shfited 3th column
c(8) <= b(8);
c(9) <= b(13);
c(10) <= b(2);
c(11) <= b(11);
--shifted 4th column
c(12) <= b(12);
c(13) <= b(1);
c(14) <= b(6);
c(15) <= b(15);
matrix_mapping_back:
--changing 16 bytes to 128 bits for output
PROCESS(c)
BEGIN
FOR i IN 15 DOWNTO 0 LOOP
shiftrow_out(8*i+7 DOWNTO 8*i) <= c(15-i);
END LOOP;
END PROCESS matrix_mapping_back;
end Behavioral;
--mixcolumn
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity mix_column is
PORT(
mixcolumn_in : IN STD_LOGIC_VECTOR(127 DOWNTO 0);
mixcolumn_out : OUT STD_LOGIC_VECTOR(127 DOWNTO 0)
);
end mix_column;
architecture Behavioral of mix_column is
TYPE matrix_index is array (15 downto 0) of std_logic_vector(7 downto 0);
TYPE shift_index is array (15 downto 0) of std_logic_vector(8 downto 0);
SIGNAL shifted_2, shifted_3, xored : shift_index;
SIGNAL c, c_out, mult_2, mult_3 : matrix_index;
BEGIN
-- MixColumn Transformation
-- multiplied matrix
-- | 02 03 01 01 | | c(0) c(4) c(8) c(12) |
-- | 01 02 03 01 | X | c(1) c(5) c(9) c(13) |
-- | 01 01 02 03 | | c(2) c(6) c(10) c(14) |
-- | 03 01 01 02 | | c(3) c(7) c(11) c(15) |
input_matrix_mapping:
PROCESS(mixcolumn_in)
BEGIN
FOR i IN 15 DOWNTO 0 LOOP
c(15-i) <= mixcolumn_in(8*i+7 DOWNTO 8*i);
END LOOP;
END PROCESS input_matrix_mapping;
multiplication_by_2:
PROCESS(c, shifted_2)
BEGIN
--move every bit of a byte toward higher position a step to perform multiply2
FOR i IN 15 DOWNTO 0 LOOP
shifted_2(i) <= c(i) & '0';
IF (shifted_2(i)(8)='1') THEN
mult_2(i) <= shifted_2(i)(7 downto 0) XOR "00011011";
ELSE
mult_2(i) <= shifted_2(i)(7 downto 0);
END IF;
END LOOP;
END PROCESS multiplication_by_2;
multiplication_by_3:
PROCESS(c, shifted_3, xored)
BEGIN
FOR i IN 15 DOWNTO 0 LOOP
shifted_3(i) <= c(i) & '0';
xored(i) <= shifted_3(i) XOR '0' & c(i);
IF (xored(i)(8)='1') THEN
mult_3(i) <= xored(i)(7 downto 0) XOR "00011011";
ELSE
mult_3(i) <= xored(i)(7 downto 0);
END IF;
END LOOP;
END PROCESS multiplication_by_3;
--group 1
c_out(0) <= mult_2(0) XOR mult_3(1) XOR c(2) XOR c(3);
c_out(4) <= mult_2(4) XOR mult_3(5) XOR c(6) XOR c(7);
c_out(8) <= mult_2(8) XOR mult_3(9) XOR c(10) XOR c(11);
c_out(12) <= mult_2(12) XOR mult_3(13) XOR c(14) XOR c(15);
--group 2
c_out(1) <= c(0) XOR mult_2(1) XOR mult_3(2) XOR c(3);
c_out(5) <= c(4) XOR mult_2(5) XOR mult_3(6) XOR c(7);
c_out(9) <= c(8) XOR mult_2(9) XOR mult_3(10) XOR c(11);
c_out(13) <= c(12) XOR mult_2(13) XOR mult_3(14) XOR c(15);
--group 3
c_out(2) <= c(0) XOR c(1) XOR mult_2(2) XOR mult_3(3);
c_out(6) <= c(4) XOR c(5) XOR mult_2(6) XOR mult_3(7);
c_out(10) <= c(8) XOR c(9) XOR mult_2(10) XOR mult_3(11);
c_out(14) <= c(12) XOR c(13) XOR mult_2(14) XOR mult_3(15);
--group 4
c_out(3) <= mult_3(0) XOR c(1) XOR c(2) XOR mult_2(3);
c_out(7) <= mult_3(4) XOR c(5) XOR c(6) XOR mult_2(7);
c_out(11) <= mult_3(8) XOR c(9) XOR c(10) XOR mult_2(11);
c_out(15) <= mult_3(12) XOR c(13) XOR c(14) XOR mult_2(15);
map_to_vector:
PROCESS(c_out)
BEGIN
FOR i IN 15 DOWNTO 0 LOOP
mixcolumn_out(8*i+7 DOWNTO 8*i) <= c_out(15-i);
END LOOP;
END PROCESS map_to_vector;
end Behavioral;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -