Программа для шифрования данных с помощью шифра Тритемиуса

Федеральное агентство по образованию Российской Федерации

Государственное образовательное учреждение высшего профессионального образования

“Южно-Уральский государственный университет”

Факультет “Приборостроительный”

Кафедра “Электронные вычислительные машины”

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

К КУРСОВОЙ РАБОТЕ

“Программирование на языках высокого уровня”

Автор проекта

Студент группы

Валимухамматов Рустам Римович

Челябинск 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

M01 03 03 05 05 07

Kkbddffh

Таким образом кодовая комбинация получается 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] ofstring – массив, куда заносятся символы ключевого слова:

Mas1= array[1..230] ofstring – массив строкового типа для введенного текста

С, с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:=”;

Iford(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

Writeln;

Writeln(‘Press <m> for enter text manually or <f> for encrypt fron the file’);

Repeat{предлагаем работу с файлом или вручную}

Z:=readkey;

Until(z=’f’)or(z=’m’)or(z=#27);

If (z<>#27) then begin

If z=’m’ then begin

Writeln(‘Please enter the text to encrypt(min length-1 symbols, max length-230)’);

Repeat{если выбран режим ввода вручную, запрашиваем текст для шифрования}

L:=0;j:=0;text:=”;h:=true;enter:=true;probel:=true;

C:=readkey;write(c);l:=1;

If ord(c)<>27 then

If ord(c)=13 then begin enter:=false;writeln(‘Text is not entered. Please enter’);end else

Begin

Text:=text+c;h:=proverka1(c);

Repeat

C:=readkey;if (proverka(c)=true) then begin

If c=#8 then backspace(text) else write(c);

If ((c<>#8) and (c<>’ ‘) and (ord(c)<>13) and (ord(c)<>27)) then

Begin

Text:=text+c;

L:=l+1;

End;

End;

Until (ord(c)=13) or (ord(c)=27) or (l=231);

If ord(c)<>27 then begin

If (text=’ ‘) then begin probel:=false;writeln(‘Text is not entered. Please enter’);end;

If (h=false) then

Begin

Write(‘You enter invalid text with numeral. Press <Enter> and try again’);

Readln;

End;

If (l=231) 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(text<>”)and(keyword<>”)and(c<>#27) then

Begin

For i:= 1 to length(keyword) do

Keyword1[i]:=copy(keyword, i,1);

Fori:= 1 tolength(text) do{переводим ключевое слово и текст в массивы}

Text1[i]:=copy(text, i,1);

Q:=1;

For i:=1 to length(text) do

Begin

M:=(((shifr(text1[i]))+(shifr(keyword1[q])))mod 31);

Kk:=deshifr(m);

Otvet:=otvet+kk;

Q:=q+1;

If q=(length(keyword)+1) then q:=1;

End; {шифруемтекст}

Writeln;

Writeln(‘Encrypted text:’,otvet);

Write(‘Save encrypted text in fail?(y-yes, n-now)’); {предлагаемсохранитьшифрованныйтекствфайл}

Repeat

Z:=readkey;

Until(z=’y’)or(z=’Y’)or(z=’n’)or(z=’N’);

If (z=’y’)or(z=’Y’) then begin

Writeln(‘Enter the name of the file’); {еслинажато <Да> просимввестиимяфайла}

Repeat

L:=0;j:=0;imyafaila:=”;h:=true;enter:=true;probel:=true;result:=true;

C1:=readkey;write(c1);l:=1;

If ord(c1)<>27 then

If ord(c1)=13 then begin enter:=false;writeln(‘Filename is not entered. Please enter’);end else

Begin

Imyafaila:=imyafaila+c1;h:=proverka1(c1);

Repeat

C1:=readkey;if (proverka(c1)=true) then begin

If c1=#8 then backspace(imyafaila) else write(c1);

If ((c1<>#8) and (c1<>’ ‘) and (ord(c1)<>13) and (ord(c1)<>27)) then

Begin

Imyafaila:=imyafaila+c1;

L:=l+1;

End;

End;

Until (ord(c1)=13) or (ord(c1)=27) or (l=50);

If ord(c1)<>27 then begin

If (imyafaila=’ ‘) then begin probel:=false;writeln(‘Filename is not entered. Please enter’);end;

If (h=false) then

Begin

Write(‘You enter invalid filename with numeral. Press <Enter> and try again’);

Readln;

End;

If (l=50) then

Begin

Write(‘Exceeded the maximum length of string. Press <Enter>’);

Repeat

C1:=readkey;

Until (c1=#13);

End;

End;

End;

Until ((probel)and(h)and(enter)and(result)) or (c1=#27);

Assign(f, imyafaila);

{$I-}

Reset(f);

{$I+}

Result:=IOResult=0;

If not result then rewrite(f) else begin reset(f);if filesize(f)<>0 then repeat read(f, c);until(EOF(f));end; {еслифайлсуществуетперемещаемкурсорвконецфайла, либосоздаемновыйфайл}

For i:=1 to length(otvet) do

Write(f, otvet[i]); {записываем данные}

Close(f);

End;

Writeln;

Writeln(‘Press <Enter> for continue encryption or <Esc> for exit’);{предлагаемпродолжитьшифрование}

Repeat

C:=readkey;

Until (c=#13)or (c=#27);

End;

End;

If (z=’f’) then{если выбрана работа с файлами вручную предлагается ввести имя файла; ввод продолжается до тех пор, пока не будет найден файл с правильным именем}

Begin

Repeat

Clrscr;

Probel1(10);Writeln(‘Encryption text (for return in maimmenu press <Esc>)’);

Writeln(‘Enter the name of the file’);

Repeat

L:=0;j:=0;imyafaila:=”;h:=true;enter:=true;probel:=true;result:=true;

C1:=readkey;write(c1);l:=1;

If ord(c1)<>27 then

If ord(c1)=13 then begin enter:=false;writeln(‘Filename is not entered. Please enter’);end else

Begin

Imyafaila:=imyafaila+c1;h:=proverka1(c1);

Repeat

C1:=readkey;if (proverka(c1)=true) then begin

If c1=#8 then backspace(imyafaila) else write(c1);

If ((c1<>#8) and (c1<>’ ‘) and (ord(c1)<>13) and (ord(c1)<>27)) then

Begin

Imyafaila:=imyafaila+c1;

L:=l+1;

End;

End;

Until (ord(c1)=13) or (ord(c1)=27) or (l=50);

If ord(c1)<>27 then begin

If (imyafaila=’ ‘) then begin probel:=false;writeln(‘Filename is not entered. Please enter’);end;

If (h=false) then

Begin

Write(‘You enter invalid filename with numeral. Press <Enter> and try again’);

Readln;

End;

If (l=50) then

Begin

Write(‘Exceeded the maximum length of string. Press <Enter>’);

Repeat

C1:=readkey;

Until (c1=#13);

End;

Assign(f, imyafaila);

{$I-}

Reset(f);

{$I+}

Result:=IOResult=0;

If not result then begin writeln(‘File not found. Try again’);result:=false;end

Else close(f);

End;

End;

Until ((probel)and(h)and(enter)and(result)) or (c1=#27);

If (result) and (c1<>#27) then

Begin

For i:= 1 to length(keyword) do

Keyword1[i]:=copy(keyword, i,1);

Assign(f2,’laba2.txt’);

Rewrite(f2);

Reset(f);

Repeat

Read(f, c1);

If ((ord(c1)>=65)and(ord(c1)<=90)or(ord(c1)>=97)and(ord(c1)<=122)) then

Write(f2,c1); {проверяем данные из файла, считываем только кириллицу, заносим во второй файл }

Until EOF(f);

Close(f);

Close(f2);

Reset(f2);

Assign(f3,’laba3.txt’);

Rewrite(f3);

Q:=1;

Repeat

Read(f2,c1);

M:=(((shifr(c1))+(shifr(keyword1[q])))mod 31);

Kk:=deshifr(m);

Write(f3,kk);

Q:=q+1;

If q=(length(keyword)+1) then q:=1;

Until(EOF(f2)); {шифруем и заносим данные в третий файл}

Close(f2);

Close(f3);

Reset(f2);

Reset(f3);

Write(‘Text for encrypt:’);

Repeat read(f2,c1);write(c1) until(EOF(f2));

Writeln;

Write(‘Encrypted text:’);

Repeat read(f3,c1);write(c1) until(EOF(f3));

Writeln;

Write(‘Press <Enter> for continue encryption or <Esc> for exit’);

Repeat

C1:=readkey; {предлагается продолжить шифрование}

Until(c1=#13)or(c1=#27);

End;

Until(c1=#27);

End;

End;

End;

Until (c=#27);

End;

If (a=’2′) thenbegin{действия второго подменю аналогичны действиям первого подменю}

Clrscr;

Repeat

If c=#13 then clrscr;

Textattr:=7;

Probel1(10);Writeln(‘Decryption text (for return in maimmenu press <Esc>)’);

Repeat

Writeln(‘Please enter keyword for decryption(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

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);

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

Writeln;

Writeln(‘Press <m> for enter text manually or <f> for encrypt fron the file’);

Repeat

Z:=readkey;

Until(z=’f’)or(z=’m’)or(z=#27);

If (z<>#27) then begin

If z=’m’ then begin

Writeln(‘Please enter the text to decrypt(min length-1 symbols, max length-230)’);

Repeat

L:=0;j:=0;text:=”;h:=true;enter:=true;probel:=true;

C:=readkey;write(c);l:=1;

If ord(c)<>27 then

If ord(c)=13 then begin enter:=false;writeln(‘Text is not entered. Please enter’);end else

Begin

Text:=text+c;h:=proverka1(c);

Repeat

C:=readkey;if (proverka(c)=true) then begin

If c=#8 then backspace(text) else write(c);

If ((c<>#8) and (c<>’ ‘) and (ord(c)<>13) and (ord(c)<>27)) then

Begin

Text:=text+c;

L:=l+1;

End;

End;

Until (ord(c)=13) or (ord(c)=27) or (l=231);

If ord(c)<>27 then begin

If (text=’ ‘) then begin probel:=false;writeln(‘Text is not entered. Please enter’);end;

If (h=false) then

Begin

Write(‘You enter invalid text with numeral. Press <Enter> and try again’);

Readln;

End;

If (l=231) 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(text<>”)and(keyword<>”)and(c<>#27) then

Begin

For i:= 1 to length(keyword) do

Keyword1[i]:=copy(keyword, i,1);

For i:= 1 to length(text) do

Text1[i]:=copy(text, i,1);

Q:=1;

For i:=1 to length(text) do

Begin

If (((shifr(text1[i]))-(shifr(keyword1[q])))>=0) then

M:=(((shifr(text1[i]))-(shifr(keyword1[q])))mod 31)

Else m:=(((shifr(text1[i]))-(shifr(keyword1[q])))+31);

Kk:=deshifr(m);

Otvet:=otvet+kk;

Q:=q+1;

If q=(length(keyword)+1) then q:=1;

End;

Writeln;

Writeln(‘Decrypted text:’,otvet);

Writeln(‘Save encrypted text in fail?(y-yes, n-now)’);

Repeat

Z:=readkey;

Until(z=’y’)or(z=’Y’)or(z=’n’)or(z=’N’);

If (z=’y’)or(z=’Y’) then begin

Writeln(‘Enter the name of the file’);

Repeat

L:=0;j:=0;imyafaila:=”;h:=true;enter:=true;probel:=true;result:=true;

C1:=readkey;write(c1);l:=1;

If ord(c1)<>27 then

If ord(c1)=13 then begin enter:=false;writeln(‘Filename is not entered. Please enter’);end else

Begin

Imyafaila:=imyafaila+c1;h:=proverka1(c1);

Repeat

C1:=readkey;if (proverka(c1)=true) then begin

If c1=#8 then backspace(imyafaila) else write(c1);

If ((c1<>#8) and (c1<>’ ‘) and (ord(c1)<>13) and (ord(c1)<>27)) then

Begin

Imyafaila:=imyafaila+c1;

L:=l+1;

End;

End;

Until (ord(c1)=13) or (ord(c1)=27) or (l=50);

If ord(c1)<>27 then begin

If (imyafaila=’ ‘) then begin probel:=false;writeln(‘Filename is not entered. Please enter’);end;

If (h=false) then

Begin

Write(‘You enter invalid filename with numeral. Press <Enter> and try again’);

Readln;

End;

If (l=50) then

Begin

Write(‘Exceeded the maximum length of string. Press <Enter>’);

Repeat

C1:=readkey;

Until (c1=#13);

End;

End;

End;

Until ((probel)and(h)and(enter)and(result)) or (c1=#27);

Assign(f, imyafaila);

{$I-}

Reset(f);

{$I+}

Result:=IOResult=0;

If not result then rewrite(f) else begin reset(f);if filesize(f)<>0 then repeat read(f, c);until(EOF(f));end;

For i:=1 to length(otvet) do

Write(f, otvet[i]);

Close(f);

End;

Write(‘Press <Enter> for continue decryption or <Esc> for exit’);

Repeat

C:=readkey;

Until (c=#13)or (c=#27);

End;

End;

If (z=’f’) then

Begin

Repeat

Clrscr;

Probel1(10);Writeln(‘Decryption text (for return in maimmenu press <Esc>)’);

Writeln(‘Enter the name of the file’);

Repeat

L:=0;j:=0;imyafaila:=”;h:=true;enter:=true;probel:=true;result:=true;

C1:=readkey;write(c1);l:=1;

If ord(c1)<>27 then

If ord(c1)=13 then begin enter:=false;writeln(‘Filename is not entered. Please enter’);end else

Begin

Imyafaila:=imyafaila+c1;h:=proverka1(c1);

Repeat

C1:=readkey;if (proverka(c1)=true) then begin

If c1=#8 then backspace(imyafaila) else write(c1);

If ((c1<>#8) and (c1<>’ ‘) and (ord(c1)<>13) and (ord(c1)<>27)) then

Begin

Imyafaila:=imyafaila+c1;

L:=l+1;

End;

End;

Until (ord(c1)=13) or (ord(c1)=27) or (l=50);

If ord(c1)<>27 then begin

If (imyafaila=’ ‘) then begin probel:=false;writeln(‘Filename is not entered. Please enter’);end;

If (h=false) then

Begin

Write(‘You enter invalid filename with numeral. Press <Enter> and try again’);

Readln;

End;

If (l=50) then

Begin

Write(‘Exceeded the maximum length of string. Press <Enter>’);

Repeat

C1:=readkey;

Until (c1=#13);

End;

Assign(f, imyafaila);

{$I-}

Reset(f);

{$I+}

Result:=IOResult=0;

If not result then begin writeln(‘File not found. Try again’);result:=false;end

Else close(f);

End;

End;

Until ((probel)and(h)and(enter)and(result)) or (c1=#27);

If (result) and (c1<>#27) then

Begin

For i:= 1 to length(keyword) do

Keyword1[i]:=copy(keyword, i,1);

Assign(f2,’laba2.txt’);

Rewrite(f2);

Reset(f);

Repeat

Read(f, c1);

If ((ord(c1)>=65)and(ord(c1)<=90)or(ord(c1)>=97)and(ord(c1)<=122)) then

Write(f2,c1);

Until EOF(f);

Close(f);

Close(f2);

Reset(f2);

Assign(f3,’laba3.txt’);

Rewrite(f3);

Q:=1;

Repeat

Read(f2,c1);

If (((shifr(c1))-(shifr(keyword1[q])))>=0) then

M:=(((shifr(c1))-(shifr(keyword1[q])))mod 31)

Else m:=(((shifr(text1[i]))-(shifr(keyword1[q])))+31);

Kk:=deshifr(m);

Write(f3,kk);

Q:=q+1;

If q=(length(keyword)+1) then q:=1;

Until(EOF(f2));

Close(f2);

Close(f3);

Reset(f2);

Reset(f3);

Write(‘Text for decrypt:’);

Repeat read(f2,c1);write(c1) until(EOF(f2));

Writeln;

Write(‘Decrypted text:’);

Repeat read(f3,c1);write(c1) until(EOF(f3));

Writeln;

Write(‘Press <Enter> for continue decryption or <Esc> for exit’);

Repeat

C1:=readkey;

Until(c1=#13)or(c1=#27);

End;

Until(c1=#27);

End;

End;

End;

Until (c=#27);

End;

Until (a=’0′);

End.

2.5 Порядок ввода исходных данных и описание получаемых результатов

-программа выдает меню пользователю;

-после входа в меню шифровки(дешифровки) запрашивает ключевое слово для шифрования, длина которого не должна быть превышать 15 символов;

-если слово не введено – выдает соответствующее сообщение и просит ввести его;

-если длина ключевого слова не соответствует условию, программа выдает соответствующее сообщение и просит ввести заново;

-программа игнорирует ввод цифр, то есть цифры не отображаются и не заносятся в память, не давая пользователю тем самым ошибиться;

-программа пропускает пробелы до и после слова и не считывает их, ввод продолжается до нажатия <Enter> либо до отмены с помощью <Esc>;

-после программа просит выбрать режим работы с текстом – вручную или из файла;

-если выбран режим ввода вручную просит ввести текст, длина которого не должна превышать 230 символов;

-проверка ввода текста такая же, как у ключевого слова;

-если выбрана работа с файлами просит ввести имя файла;

-после в обоих случаях выдает шифрованный текст;

-для выхода в основное меню предлагается нажать <Esc>,для продолжения работы в подменю – <Enter>,для выхода из программы предлагается нажать <0>.

2.6 Описание тестовых заданий и анализ правильности функционирования

Рис.1 Начальное окно

Рис. 2 Подменю шифровки. После ввода ключевого слова предлагается два режима ввода текста – вручную либо из файла

Рис.2.1Пример шифрования вручную

Рис.2.2 Пример шифрования из файла( файл содержит комбинацию ab_c1d2ef)

Рис.3.1.Меню дешифровки. Пример ввода вручную. Из рис 2.1 следует что шифрование произведено правильно

Рис.3.2.Пример дешифрования из файла. (файл содержит комбинацию b_d1d2f3fh ) Из рис 2.2 следует что дешифрование произведено правильно

3. Литература

1 Прайс Д. Программирование на языке Паскаль: Практическое руководство. Перевод с англ.-М:.Мир,1987.-232с.;

2. Фаронов В. В. Ф24 Турбо Паскаль(в 3-х экземплярах).Кн.3.Практика программирования. Часть 1.-М.:Учебно-инженерный центр “МВТУ – ФЕС ТО ДИДАКТИК”,1993.-238с.

3. Перминов О. Н. Программирование на языке Паскаль. – М.:Радио и связь,1989.-224 с. 128 с.

4. Грогоно П. Программирование на языке Паскаль: Пер. с англ./Под ред. Д. Б. Подшивалова. – М.: Мир, 1985. – 392 с.


Программа для шифрования данных с помощью шифра Тритемиуса