Шифрувальник та дешифрувальник

Міністерство вищої освіти України

Запорізький Національний Технічний Університет





















ПОЯСНЮВАЛЬНА ЗАПИСКА ДО КУРСОВОГО

ПРОЄКТУ З ДИСЦИПЛІНИ “ОП та АМ”









Шифрувальник та дешифрувальник





















2003


РЕФЕРАТ



Об’єкт дослідження – вивчення середи програмування TURBO PASCAL 7.0 на прикладі створення програми.

Мета роботи – написати програму, за допомогою якої можливо було б шифрувати інформацію та розпізнавати шифровану.

Програма працює з машинописом англійського тексту, який відповідає стандартам ASCII. Кирилиця програмою розпізнається не чітко, завдяки розходженню її кодування зі стандартами ASCII.

Програма може здійснювати шифровку та розшифровку інформації,яка знаходиться у файлах з розширенням .doc , .txt . 

Принцип дії – це зміна коду символу за мировим стандартом завдяки ключу, який має знати лише користувач. Цей числовий ключ і буде зміщенням коду символів. Він не повинен бути кратним 256, тобто він не повинен приймати значення 0, 256, 512 та інші.

Простий і наглядний інтерфейс програми лише полегшує її використання. 


ЗМІСТ



	Реферат

	Варіанти кодування знакогенераторів ПК

	Робота з програмою, її інтерфейс

	Основні процедури і їх функції

	Текст програми

	Рисунок 1.1 – Меню програми

	Рисунок 1.2 – Файл, який шифрується програмою

	Рисунок 1.3 – Шифрування інформації програмою

	Рисунок 1.4 – Файл, який містить зашифровану інформацію

	Рисунок 1.5 – Розшифровка інформації програмою

	Рисунок 1.6 – Файл, який містить розшифровану інформації


Варіанти кодування знакогенераторів ПК



Стандартний знакогенератор ПК ІВМ складається з двох частин: символи з кодами від 0 до 127, утворюючі першу половину символів знакогенератора, будуються за стандартом ASCII і однакові на всіх ІВМ – сумісних ПК. Друга половина символів (коди 128...255) можуть відрізнятись на ПК різного типу. У стандартному знакогенераторі фірми ІВМ символи псевдографіки займають три суміжні області (коди 176...223). Область з кодами від 128 до 175 та від 224 до 239 використовується для розміщення деяких символів національного алфавіту різних європейських мов, а остання (коди 240...255) – для розміщення спеціальних знаків. З розрахунку цього рас положення символів розроблюється подальша множина програм зарубіжного походження.

Стандартний вітчизняний знакогенератор будується на рекомендаціях Міжнародного Консультаційного Комітету По Телеграфії і Телефонії (МККТТ). Розміщення символів у другій половині таблиці цього знакогенератору різко відрізняється від прийнятої фірмою ІВМ, що затрудняє користування зарубіжного програмного забезпечення на вітчизняних ПК. У зв’язку з цим, стандартний (ГОСТовий ) варіант кодування часто замінюється альтернативним, головна риса якого – розміщення символів псевдографіки ні тих же місцях, що й в знакогенераторі ІВМ. Недолік такого знакогенератора міститься у тому, що символи Кирилиці утворюють розривний масив. Саме на цей варіант розраховані всі програми вітчизняного виробництва. Він став фактичним стандартом для зарубіжних фірм, які виготовляють ПК для експорту до нашої країни. 


Робота з програмою, її інтерфейс



Для початку роботи з програмою необхідно запустити її, клацнувши два рази лівою кнопкою миші по ярлику KYRSOVIK.BAT . Після цього на екрані монітора з’явиться меню програми (Рисунок 1.1 – Меню програми, с.).

Клавішами “догори” і “донизу” необхідно вибрати дію, яку буде виконувати програма: “Шифровка Информации”, “Расшифровка Информации” або “Выход”.

При виборі “Шифровка Информации” з’явиться запит на параметри, які повинні бути введені (Рисунок 1.3 – Шифрування інформації програмою, с.): файл, інформацію якого буде шифрувати програма (Рисунок 1.2 – Файл, який шифрується програмою, с.), файл, який буде містити шифровану інформацію та код шифрування. Шифрована інформація буде міститись в текстовому файлі (Рисунок 1.4 – Файл, який містить зашифровану інформацію). Після введення цих даних з’явиться заново меню.

При виборі “Расшифровка Информации” з’явиться вікно 

(Рисунок 1.5 – Розшифровка інформації програмою, с. ), у якому повинні бути введені файл, інформацію якого потрібно розшифрувати , файл, в який буде поміщена розшифрована інформація (Рисунок 1.6 – Файл, який містить розшифровану інформації) та відповідний код шифрування. 

При виборі “Выход” програма завершує свою роботу.


Основні процедури і їх функції 



Алгоритм програми складається з роботи двох процедур: процедури шифрування (Zashifr) і дешифрування (Racshifr). 

В процедурі Zashifr (сторінки 7, 13) вказується путь розташування (name_otkyda) файла (f), інформацію якого необхідно зашифрувати, та новій файл (f_new) і путь до нього (name_kyda), в який необхідно помістити зашифрований текст . 

В строкову змінну (s) заноситься інформація файла, який шифрується, а потім ASCII код кожного символу цієї строкової змінної зміщується в сторону зростання на величину ключа коду (sdvig). Потім в іншу строкову змінну (ss) заносяться всі кодовані символи і ця змінна записується до файлу, який має містити шифрований текст. 

В процедурі Racshifr (сторінки 8, 13) навпаки, код строкової змінної (s), в яку було занесено шифровану інформацію, зменшується на величину ключа коду (sdvig). І також інша строкова змінна (ss), яка вже буде містити розшифровану інформацію, поміститься вже у новий файл, який буде містити розкодовану інформацію.

Складання інтерфейсу будується на використанні стандартних модулів CRT і GRAPH середовища компілятора TURBO PASCAL 7.0 . 

Стандартне перебування ПК після включення, а також у момент запуску відкомпільованої програми відповідає роботі екрана у текстовому режимі, тому програма ініціалізує графічний режим роботи дисплею адаптера. Після роботи програми ПК вертається в текстовий режим. 


Текст програми



Uses CRT,GRAPH;

label a;

var gd,gm,k:integer;

 ch:Char;

 bool:boolean;

{--------------------------------------}

Procedure Zashifr;

var name_otkyda,name_kyda,s,st,ss:string;

 f,f_new:text;

 sdvig,i,j:integer;

begin

 writeln(' Введите путь к текстовому файлу,');

 writeln(' содержимое которого необходимо зашифровать:');

 readln(name_otkyda);

 assign(f,name_otkyda);

 reset(f);

 writeln(' Введите путь к текстовому файлу,');

 writeln(' содержимое которого будет шифровкой предыдущего:');

 readln(name_kyda);

 assign(f_new,name_kyda);

 rewrite(f_new);

 writeln(' Введите сдвиг кода символа:');

 readln(sdvig);

 writeln(' Результат шифровки данных:');

 while not Eof(f) do

 begin readln(f,s);

 ss:='';

 for i:=1 to length(s) do

 begin

 for j:=0 to 255 do

 begin

 if j=ord(s[i]) then

 begin

 st:=CHR(sdvig+j);

 ss:=ss+st;

 write(st);

 end;

 end;

 end;

 writeln;

 writeln(f_new,ss);

 ss:='';

 end;

 close(f);

 close(f_new);

end;

{--------------------------------------}

Procedure Racshifr;

var name_otkyda,name_kyda,s,st,ss:string;

 f,f_new:text;

 sdvig,i,j:integer;

begin

 writeln(' Введите путь к текстовому файлу,');

 writeln(' содержимое которого необходимо расшифровать:');



 readln(name_otkyda);

 assign(f,name_otkyda);

 reset(f);

 writeln(' Введите путь к текстовому файлу,');

 writeln(' содержимое которого будет расшифровкой предыдущего:');

 readln(name_kyda);

 assign(f_new,name_kyda);

 rewrite(f_new);

 writeln(' Введите сдвиг кода символа:');

 readln(sdvig);

 writeln(' Результат расшифровки данных:');

 while not Eof(f) do

 begin

 readln(f,s);

 ss:='';

 for i:=1 to length(s) do

 begin

 for j:=0 to 255 do

 begin

 if j=ord(s[i]) then

 begin

 st:=CHR(-sdvig+j);

 ss:=ss+st;

 write(st);

 end;

 end;

 end;

 writeln;

 writeln(f_new,ss);

 ss:='';

 end;

 close(f);

 close(f_new);

end;

{--------------------------------------}

begin

 clrscr;

 bool:=false;

 gd:=detect;

 a: InitGraph(gd,gm,'');

 clearDevice;

 SetBkColor(9);

 Rectangle(200,100,420,150);

 SetFillStyle(1,6);

 FloodFill(220,120,White);

 OutTextXY(235,125,'Шифровка Информации');

 Rectangle(200,200,420,250);

 SetFillStyle(1,8);

 FloodFill(220,220,White);

 OutTextXY(225,225,'Расшифровка Информации');

 Rectangle(200,300,420,350);

 SetFillStyle(1,8);

 FloodFill(220,320,White);

 OutTextXY(280,325,' Выход');

 k:=3;

 repeat ch:=readkey;

 case ch of

 #72:begin

 k:=k+1;

 if k=4 then k:=1;

 case k of

 3:begin

 Rectangle(200,100,420,150);

 SetFillStyle(1,6);

 FloodFill(220,120,White);

 OutTextXY(235,125,'Шифровка Информации');

 Rectangle(200,200,420,250);

 SetFillStyle(1,8);

 FloodFill(220,220,White);

 OutTextXY(225,225,'Расшифровка Информации');

 Rectangle(200,300,420,350);

 SetFillStyle(1,8);

 FloodFill(220,320,White);

 OutTextXY(280,325,' Выход');

 end;

 2:begin

 Rectangle(200,100,420,150);

 SetFillStyle(1,8);

 FloodFill(220,120,White);

 OutTextXY(235,125,'Шифровка Информации');

 Rectangle(200,200,420,250);

 SetFillStyle(1,6);

 FloodFill(220,220,White);

 OutTextXY(225,225,'Расшифровка Информации');

 SetFillStyle(1,8);

 FloodFill(220,320,White);

 OutTextXY(280,325,' Выход');

 end;

 1:begin

 Rectangle(200,100,420,150);

 SetFillStyle(1,8);

 FloodFill(220,120,White);

 OutTextXY(235,125,'Шифровка Информации');

 Rectangle(200,200,420,250);

 SetFillStyle(1,8);

 FloodFill(220,220,White);

 OutTextXY(225,225,'Расшифровка Информации');

 SetFillStyle(1,6);

 FloodFill(220,320,White);

 OutTextXY(280,325,' Выход');

 end;

 end;

 end;

 #80:begin

 k:=k-1;

 if k=0 then k:=3;

 case k of

 3:begin

 Rectangle(200,100,420,150);

 SetFillStyle(1,6);

 FloodFill(220,120,White);

 OutTextXY(235,125,'Шифровка Информации');

 Rectangle(200,200,420,250);

 SetFillStyle(1,8);

 FloodFill(220,220,White);

 OutTextXY(225,225,'Расшифровка Информации');

 Rectangle(200,300,420,350);

 SetFillStyle(1,8);

 FloodFill(220,320,White);

 OutTextXY(280,325,' Выход');

 end;

 2:begin

 Rectangle(200,100,420,150);

 SetFillStyle(1,8);

 FloodFill(220,120,White);

 OutTextXY(235,125,'Шифровка Информации');

 Rectangle(200,200,420,250);

 SetFillStyle(1,6);

 FloodFill(220,220,White);

 OutTextXY(225,225,'Расшифровка Информации');

 SetFillStyle(1,8);

 FloodFill(220,320,White);

 OutTextXY(280,325,' Выход');

 end;

 1:begin

 Rectangle(200,100,420,150);

 SetFillStyle(1,8);

 FloodFill(220,120,White);

 OutTextXY(235,125,'Шифровка Информации');

 Rectangle(200,200,420,250);

 SetFillStyle(1,8);

 FloodFill(220,220,White);

 OutTextXY(225,225,'Расшифровка Информации');

 SetFillStyle(1,6);

 FloodFill(220,320,White);

 OutTextXY(280,325,' Выход');

 end;

 end;

 end;

 #13:begin

 case k of

 3:begin

 ClearDevice;

 CloseGraph;

 Zashifr;

 readln;

 goto a;

 end;

 2:begin

 ClearDevice;

 CloseGraph;

 RacShifr;

 readln;

 goto a;

 end;

 1:begin

 ClearDevice;

 CloseGraph;

 bool:=true;

 end;

 end;

 end;

 end;

 until bool;

end.




ІЛЮСТРАЦІЇ

 

		

Рисунок 1.1 – Меню програми


 



 Рисунок 1.2 – Файл, який шифрується програмою


 

Рисунок 1.3 – Шифрування інформації програмою






  

Рисунок 1.4 – Файл, який містить зашифровану інформацію






Рисунок 1.5 – Розшифровка інформації програмою




 

Рисунок 1.6 – Файл, який містить розшифровану інформації