Курсовая работа: Программа для шифрования данных с помощью шифра Тритемиуса
Курсовая работа: Программа для шифрования данных с помощью шифра Тритемиуса
Федеральное
агентство по образованию Российской Федерации
Государственное
образовательное учреждение высшего профессионального образования
«Южно-Уральский
государственный университет»
Факультет
«Приборостроительный»
Кафедра
«Электронные вычислительные машины»
ПОЯСНИТЕЛЬНАЯ
ЗАПИСКА
К КУРСОВОЙ
РАБОТЕ
«Программирование
на языках высокого уровня»
Автор проекта
студент группы
Валимухамматов Рустам Римович
Челябинск 2010г.
Содержание
1. Описание применения
1.1 Описание задачи и метода ее решения
1.2 Входные и выходные данные
2. Описание программы
2.1 Структура программы
2.2 Структуры используемых данных
2.3 Схема алгоритма
2.4.Текст программы
2.5 Порядок ввода исходных данных и
описание получаемых результатов
2.6 Описание тестовых заданий и анализ
правильности функционирования
3. Литература
1. Описание применения
1.1 Описание задачи и
метода ее решения
Составить программу на
языке Turbo Pascal для шифрования данных с помощью шифра Тритемиуса(расширение
кода Цезаря).Выглядит это так.
Буквы алфавита
нумеруются. Затем ключевое слово циклически накладывается на кодируемый текст.
Кодовая буква получается как остаток от деления суммы номера буквы кодируемого
текста и ключевого слова на число 31 например (ключевое слово bc)
a
b c d e f
k
00 01 02 03 04 05
b
c b c b c
1 01 02 01 02 01 02
m
01
03 03 05 05 07
kk
b d
d f
f h
Таким образом кодовая
комбинация получается bddffh.
Ниже приведена таблица
номеров букв:
A
– 00; N – 13;
B
– 01; O – 14;
C
– 02; P – 15;
D
– 03; Q – 16;
E
– 04; R – 17;
F
– 05; S – 18;
G
– 06; T – 19;
H
– 07; U – 20;
I
– 08; V – 21;
J
– 09; W – 22;
K
– 10; X
– 23;
L
– 11; Y
– 24 ;
M
– 12; Z
– 25;
1.2 Входные и выходные
данные
На вход программе
подается ключевое слово. Затем задается текст для шифрования(дешифрования, в
зависимости от выбранного меню) вручную, либо указанием имени файла с текстом.
Минимальная длина текст и ключевого слово – 1 символ. Максимальная длина
ключевого слово – 15 символов, максимальная длина текста, заданного вручную, – 230
символов(при чтении из файла ограничений нету).
На выход программа
выдает шифрованный (дешифрованный) текст.
2. Описание программы
2.1 Структура программы
Программа организована
цельным текстом, пошагово. Язык интерфейса – английский.
Программа выполняет
следующие действия:
-строит графическое
оформление;
-предлагает меню из 3-х
пунктов;
-после захода в подменю
запрашивает ключевое слово(всегда, в независимости от выбранного меню);
-запрашивает текст для
(де)шифрования (либо просит ввести имя файла, если чтение происходит оттуда);
-выдает (де)шифрованный
текст(либо также исходный, если чтение из файла);
-предлагает продолжить (де)шифрование,
либо вернуться в главное меню.
2.2 Структуры
используемых данных
mas=array[1..15]
of string
-
массив ,куда заносятся символы ключевого слова:
mas1=
array[1..230] of
string - массив строкового
типа для введенного текста
с,с1 - переменные
символьного типа для считывания с клавиатуры символов(либо из файла);;
keyword,text,otvet,
imyafaila – переменные строкового
типа;в них заносится ключевое слово, текст для шифрования, получившийся
(де)шифрованный текст, и имя файла для дальнейшей работы с ним;
h,probel,enter –
переменные логического типа, используемые для различных проверок на вводе
данных;
kk
-
переменная используется для построения (де)шифрованного текста
f,f2,f3 - файлы
символьного типа для сохранения(считывания)данных
function proverka -
функция для проверки вводимого текста. Становится равной true
если вводимый символ буква;
function shifr -
функция шифрования. В качестве аргумента выступает переменная строкового типа,
но, так как, в программе заранее задается что эта переменная будет длиною в
один символ, функция сначала переводит переменную в символьный тип, затем
используется порядковый номер символа в таблице ASCII
для шифрования;
function deshifr - функция
дешифрования. Используется также порядковый номер символа в таблице ASCII;
backspace -функция
корректировки вводимых данных, стирает последний вводимый символ.
2.3
Схема
алгоритма
 
2.4
Текст
программы
program
kursach;
uses
crt;
type
mas=array[1..15] of string;
mas1=array[1..230]
of string;
function
proverka(q:char):boolean;
begin
if
((ord(q)>=65) and (ord(q)<=90)) or ((ord(q)>=97)) and
((ord(q)<=122)) or (q=#8)
or
(q=#27) or (q=#13) or(q='.') then proverka:=true else proverka:=false;
end;
function
proverka1(q1:char):boolean;
begin
if
((ord(q1)<65) or (ord(q1)>90) and (ord(q1)<97) or (ord(q1)>122))
then proverka1:=false;
end;
function
shifr(y1:string):integer;
var
y2:array[1..2] of string;y:char;
begin
y2[1]:=y1;
y:=y2[1][1];
if
((ord(y)>=65)and(ord(y)<=90))
then
shifr:=(ord(y)-65) else
if
((ord(y)>=97)and(ord(y)<=122))
then
shifr:=(ord(y)-97)
end;
function
deshifr(z:integer):char;
begin
deshifr:=(chr(z+97));
end;
procedure
backspace(var s21:string);
var
i1:integer;s31:string;
begin
if
length(s21)<>0 then begin
gotoXY(whereX-1,whereY);
write('
');
gotoXY(whereX-1,whereY);
s31:='';
for
i1:=1 to (length(s21)-1) do s31:=s31+s21[i1];
s21:=s31;
end;
end;
procedure
probel1(i2:integer);
var
i3:integer;
begin
for
i3:=1 to i2 do write(' ');
end;
var
a,c,c1,z,vixod:char;keyword1:mas;
text1:mas1;
s,keyword,text,otvet,imyafaila:string;
i,k,l,o,j,d,sdvig,u:integer;h,probel,enter,t,y,p,result:boolean;
kk:char;m,q:integer;
f,f2,f3:file
of char;
begin
clrscr;
textattr:=116;
for
i:=1 to 80 do write('=');
window
(1,0,1,7);
for
i:=1 to 6 do writeln('*');
window
(1,8,80,9);
for
i:=1 to 80 do write('=');
window
(80,2,80,8);
for
i:=1 to 6 do write ('*');
textattr:=3;
window
(20,3,80,5);
write
('Work for programming on high-level languages');
window
(25,5,80,6);
write
('Encryption based on Tritemius code');
textattr:=6;
window
(44,7,80,8);
write
('Made by Valimyxammatov Rustam,PS-197');
window
(5,9,80,25);
sdvig:=0;
textattr:=7;
repeat
clrscr;
probel1(28);writeln('MainMenu.Press:');
probel1(5);writeln('1
- for encryption');
probel1(5);writeln('2
- for decryption');
probel1(5);write('0
- for exit');
repeat
a:=readkey;
{запрашиваем выбор меню}
until
(a='0') or (a='1') or (a='2') or (a='3');
if
(a='1') then
begin
clrscr;
repeat
if
c=#13 then clrscr;
textattr:=7;
probel1(10);Writeln('Encryption
text (for return in maimmenu press <Esc>)');
repeat
Writeln('Please
enter keyword for encryption(min length-1 symbol,max length-15)');
l:=0;j:=0;keyword:='';h:=true;enter:=true;probel:=true;
{запрашиваем ключевое слово,начинаем посимвольно считывать}
c:=readkey;write(c);l:=1;otvet:='';
if
ord(c)<>27
then {
если первый символ не клавиша Esc}
if
ord(c)=13 then begin enter:=false;writeln('Keyword is not entered.Please
enter');end else
begin
keyword:=keyword+c;h:=proverka1(c);
repeat
c:=readkey;if
(proverka(c)=true) then begin
if
c=#8 then backspace(keyword) else write(c);
if
((c<>#8) and (c<>' ') and (ord(c)<>13) and
(ord(c)<>27)) then {игнорируемп
роблелы}
begin
keyword:=keyword+c;
l:=l+1;
end;
end;
until
(ord(c)=13) or (ord(c)=27) or (l=16); {продолжаем
ввод
пока
не
нажат
Enter}
if
ord(c)<>27 then begin
if
(keyword=' ') then begin probel:=false;writeln('Keyword is not entered.Please
enter');end;
if
(h=false) then
begin
write('You
enter invalid keyword with numeral.Press <Enter> and try again');
readln;
end;
if
(l=16) then
begin
write('Exceeded
the maximum length of string.Press <Enter>');
repeat
c:=readkey;
until
(c=#13);
end;
end;
end;
until
((probel)and(h)and(enter)) or (c=#27); {проверяем
правильность
ввода,если
верно
выходим
из
цикла}
if
(probel)and(h)and(enter) and (c<>#27) then begin
Страницы: 1, 2, 3 |