Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая_СТЗИ_Клепач.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
644.79 Кб
Скачать

Алгоритмическое изображение схемы

Порядок выполнения работы

Шифруемая информация:

Klepach Olga 431

Операции шифрования/дешифрования согласно заданию:

  • шифрующая операция – возведение в степень и определение остатка ;

  • дешифрующая операция возведение в другую степень и определение остатка.

Входные порты:

сlk - тактовый сигнал;

clk2 – тактовый сигнал, для вывода информации на выходные порты;

rd_da_fa – сигнал разрешения чтения данных из файла;

wr_da_fa – сигнал разрешения записи дешифрованных данных в файл;

Выходные порты:

shufr_r – закодированная (зашифрованная) информация в формате real;

deshufr_ch – декодированная (расшифрованная информация) в формате character.

Исходная шифруемая информация и информация о шифрующих ключах размещается в массивах определяемых пользователем, размеры которых соответствуют объему хранимой в них информации.

В теле архитектуры программы используются несколько внутренних переменных, которые используются в процессе конвертирования данных из массивов в процессах их шифрования и расшифровывания. В проекте используется библиотека пользователя WORK. Она используется только в пределах этого проекта. В этой библиотеке находятся пакеты, содержащие конвертирующие функции различных вариаций.

Исходная шифруемая информация и информация о шифрующих ключах хранится в файлах операционной системы (ОС). Информация, хранимая в файлах ОС, проинициализирована массивам, объявленным пользователем в теле проекта.

В теле архитектуры программы используются несколько внутренних переменных, которые используются в процессе конвертирования данных из массивов в процессах их шифрования и расшифровывания.

В проекте используется библиотечный пакет TEXTIO, в котором определен специальный файловый тип TEXT, дающий возможность получать доступ к текстовой информации, а также выполнять над этими файлами операции READ, WRITE, APPEND.

Дешифрованая информация

Листинг программы проекта

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use std.textio.all;

USE IEEE.STD_LOGIC_TEXTIO.ALL;

library work;

use work.converters.all;

entity lr22 is

port( clk : in STD_LOGIC;

clk_out : in STD_LOGIC;

rd_da_fa : in STD_LOGIC;

wr_da_fa : in STD_LOGIC;

cod : out string (1 to 32));

end lr22;

architecture lr22_arch of lr22 is

type masiv_int is array (1 to 32) of integer;

type mas_std is array (1 to 32)of std_logic_vector(0 to 7);

signal mas1_inf : string (1 to 32);

signal s_data_char: string (1 to 32);

signal s_decod_mess_char, s_cod_mess_char: string (1 to 32);

signal s_data_int : masiv_int;

signal s_data_vec, s_shifr_vec, s_data_vec2 : mas_std;

signal s_cod_mess_int: masiv_int ;

signal s_decod_int: masiv_int ;

signal cod_r_num, cod_l_num : masiv_int;

-------------------------------------

-- Функц³я шифрування----------------

-------------------------------------

function codfunc (X: integer; Y: integer ) return integer is

variable tmp : integer ;

begin

for i in 1 to Y-1 loop

if i = 1 then

tmp := X**2;

else

tmp := X*tmp;

tmp := tmp mod 35;

end if;

end loop ;

return tmp;

end codfunc;

-------------------------------------

function decodfunc (X: integer; Y: integer ) return integer is

variable tmp : integer ;

begin

for i in 1 to Y-1 loop

if i = 1 then

tmp := X**2;

else

tmp := X*tmp;

tmp := tmp mod 35;

end if;

end loop ;

return tmp;

end decodfunc;

-------------------------------------

begin

read_proc: process(clk)

variable read_buf1 : string(1 to 32);

variable wid1 : natural;

file read_cont_data : TEXT open READ_MODE is "message.txt";

begin

if clk'event and clk ='1' and rd_da_fa ='1' then

FILE_OPEN(read_cont_data,"message.txt", READ_MODE);

READ(read_cont_data, read_buf1, wid1);

mas1_inf <= read_buf1;

end if;

FILE_CLOSE(read_cont_data);

end process;

process(clk)

variable text_int, kluch_int, tmp,tmp2,tmp3, kod_tmp : integer ;

variable r_num, l_num, conv_temp : integer ;

variable r_num2, l_num2, cod_r_num2, cod_l_num2, conv_temp2 : integer ;

begin

if clk'event and clk = '1' then

s_data_char <= mas1_inf;

for i in 1 to 32 loop

s_data_vec(i) <= CONV(s_data_char(i));

s_data_int(i) <= CONV (s_data_vec(i));

conv_temp := s_data_int(i);

r_num := conv_temp mod 16;

l_num := (conv_temp - r_num)/16;

cod_r_num(i)<= codfunc(r_num, 5) ;

cod_l_num(i)<= codfunc(l_num, 5) ;

s_cod_mess_int(i) <= cod_l_num(i)*16+ cod_r_num(i);

s_shifr_vec(i) <= CONV8(s_cod_mess_int(i));

s_cod_mess_char(i) <= CONV (s_shifr_vec(i));

end loop ;

cod <= s_cod_mess_char;

for i in 1 to 32 loop

cod_r_num2:= codfunc(cod_r_num(i), 29) ;

cod_l_num2:= codfunc(cod_l_num(i), 29) ;

s_decod_int(i) <= cod_l_num2*16+ cod_r_num2;

s_data_vec2(i) <= CONV8(s_decod_int(i));

s_decod_mess_char(i) <= CONV (s_data_vec2(i));

end loop ;

end if;

end process;

write_proc : process (clk_out)

variable wr_buf1, wr_buf2 : string(1 to 32);

file wtite_cont : TEXT open write_MODE is;

file wtite_cont2 : TEXT open write_MODE is;

begin

if clk_out'event and clk_out = '1' and wr_da_fa = '1' then

for i in 1 to 32 loop

wr_buf1(i):= s_cod_mess_char(i);

wr_buf2(i):= s_decod_mess_char(i);

end loop;

FILE_OPEN(wtite_cont, , write_MODE );

FILE_OPEN(wtite_cont2, , write_MODE );

WRITE(wtite_cont, wr_buf1);

WRITE(wtite_cont2, wr_buf2);

end if;

FILE_CLOSE(wtite_cont);

FILE_CLOSE(wtite_cont2);

end process;

end lr22_arch;