Смекни!
smekni.com

Шифровка и дешифровка текста (стр. 1 из 2)

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

дистанционная форма обучения

Кафедра автоматизированных систем управления (АСУ)

Программирование

Курсовой проект

«шифровка и дешифровка текста»

__________________________________________

(Фамилия Имя Отчество)

(шифр)

(почтовый адрес)

Дата выполнения работы ___________________

Дата проверки ___________________

Оценка ___________________

И.О.Фамилия преподавателя ___________________

Подпись преподавателя ___________________

СОДЕРЖАНИЕ:

Содержание………………………………………………………………....стр.2

Введение…………………………………………………………………….стр. 3

Постановка задачи………………………………………………………...стр. 3

Используемые методы…………………………………………………….стр. 3

Описание алгоритма программы………………………………………..стр. 3

Описание входных и выходных данных………………………………..стр. 8

Заключение…………………………………………………………………стр. 8

Список литературы………………………………………………………..стр. 9

Приложение 1. Листинг программы……………………………………стр. 10

Приложение 2. Результаты работы……………………………………..стр. 13

Введение.

Целью данного курсового проекта является закрепление полученных знаний по разработке алгоритмов на персональном компьютере в среде Турбо Паскаль.

В курсовом проекте рассматривается работа программы для шифровки и дешифровки текста.

Постановка задачи.

Необходимо написать программу, которая будет шифровать и дешифровать текст. При этом программа должна брать исходный текст из файла, а результат сохранять в другом файле. Также необходимо создать «дружественный» интерфейс, для упрощения работы с программой конечного пользователя.

Используемые методы.

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

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

Описание алгоритма программы.

Программа Crypter. В программе используются следующие функции и процедуры:

Функция Password (FUNCTIONPassword(Psw: string): integer;): преобразует каждый символ, введенного пользователем ключя, в его числовой код и находит алгебраическую сумму этих чисел. В данной функции используются следующие переменные:

· строковая переменная Psw – при вызове функции ей передается ключ введенный пользователем с клавиатуры, именно это значение и присваивается данной переменной

· переменные i, res – целого типа служат для: переменная i необходима для работы цикла, а в переменную res будет записываться результат работы цикла.

Переменной res присваиваем значение равное 0. Для того, чтобы перевести каждый символ ключа в его числовой код создадим цикл размером от 1 до количества символов в ключе (данное значение мы получим при помощи команды length(psw) данная команда возвращает количество символов в строке). Затем в этом цикле с помощью команды ord(psw[i]) найдем числовые коды всех символов ключа, сложим их и присваиваем полученное значение функции Password.

FUNCTION Password(Psw: string): integer;

VAR i,res: integer;

BEGIN

res:=0;

for i:=1 to length(psw) do res:=res+ord(psw[i]);

Password:=res;

END;

Функция Crypt (FUNCTION Crypt(CryptStr: string): string;): функциядляшифрованиятекста. При вызове данной функции ей передается текст который необходимо шифровать, этот текст присваивается переменной CryptStr. В данной функции созданы следующие внутренние переменные необходимые для ее работы:

· переменные s, s1 – строкового типа. В переменную s1 будет записываться результат работы. Переменная s будет содержать в себе значение первого символа строки CryptStr

· переменные i, rez – целого типа. Переменная i необходима для работы цикла. Переменная rez будет содержать числовое значение символа находящегося в s.

Переменной s1 присваиваем пустое значение. Создаем цикл от 1 до количества символов в тексте содержащемся в переменной CryptStr (это значение мы получим выполнив команду length(CryptStr)). Далее в цикле текст «разбирается» на символы и каждый символ командой ORD переводится в его числовой код при этом к полученному числу прибавляется алгебраическая сумма числовых кодов символов ключа (эта сумма возвращается при вызове функции Password), полученное значение присваивается переменной rez. Затем полученные числовые значения переводятся в символьные командой STR и складываются, при этом между значениями вставляются пробелы (это необходимо для того, чтобы дешифратор по пробелам мог отделить числа, иначе он принял бы их за одно большое число).

FUNCTION Crypt(CryptStr: string): string;

VAR s,s1: string;

i,rez: integer;

BEGIN

s1:='';

for i:=1 to length(CryptStr) do

begin

s:=CryptStr;

s:=copy(s,1,1);

CryptStr:=copy(CryptStr,2,length(CryptStr)-1);

rez:=ord(s[1])+Password(PassW);

str(rez,s);

s1:=s1+s+' ';

end;

delete(s1,length(s1),1);

Crypt:=s1;

END;

Функция Decrypt (FUNCTIONDecrypt(DecryptStr: string): string;): функция для дешифровки текста. При вызове этой функции ей передается зашифрованный текст, который необходимо расшифровать, этот текст записывается в переменную DecryptStr. В данной функции созданы следующие внутренние переменные необходимые для ее работы:

· переменные Xpos, i, v, e – целого типа. Переменная Xpos будет содержать в себе позицию пробела. Переменная i необходима для работы цикла. Переменные v и eнеобходимы для работы с оператором VAL (данный оператор преобразует символ в число)

· переменные Code, s1 – строкового типа. Переменная s1 будет содержать результат работы. Переменная Code будет содержать значение первого числа извлеченного из переменной DecryptStr.

Создадим цикл размером от 1 до количества символов в переменной DecryptStr (это значение мы получим выполнив команду length(DecryptStr)). Далее в цикле из полученного зашифрованного текста «выдергиваются» числа разделенные пробелами и переводятся в числовые значения при помощи команды VAL потом от них отнимается алгебраическая сумма числовых кодов символов ключа (эта сумма возвращается при вызове функции Password), затем полученные значения преобразуются командой CHR в символьные и складываются. Полученный результат возвращается функцией Decrypt.

FUNCTION Decrypt(DecryptStr: string): string;

VAR Xpos,i,v,e: integer;

Code,s1: string;

BEGIN

s1:='';

for i:=1 to length(DecryptStr) do

begin

xpos:=pos(' ',DecryptStr);

if xpos<=0 then

begin

val(DecryptStr,v,e);

s1:=s1+chr(v-password(PassW));

Decrypt:=s1;

exit;

end;

code:=copy(DecryptStr,1,xpos-1);

val(code,v,e);

s1:=s1+chr(v-password(PassW));

delete(DecryptStr,1,xpos);

end;

Decrypt:=s1;

END;

Для упрощения работы с программой конечного пользователя были созданы следующие процедуры:

PROCEDURE Menu – процедура, выводящая на экран основное меню программы. Меню организовано с помощью операторов writeln, readlnи содержит следующие пункты:

1. Шифровать текст

2. Дешифровать текст

3. Выход

PROCEDURE Menu;

BEGIN

repeat

begin

ClrScr;

writeln('Программа шифровки и дешифровки текста!!!');

writeln;

writeln('1. Шифровать текст');

writeln('2. Дешифровать текст');

writeln('3. Выход');

writeln;

write('Выберите пункт меню: ');

readln(men);

case men of

1 : CryptP;

2 : DecryptP;

end;

end;

until men=3;

END;

При выборе первого пункта меню вызывается процедура шифрования текста (PROCEDURE CryptP;). Данная процедура создает интерфейс для ввода имени файла, который необходимо зашифровать и ключа. После ввода имени файла и ключа данный файл открывается (при помощи команды Assign) и весь текст из него записывается в переменную Line.Также создаем второй файл в который будет записан результат работы (этот файл будет иметь имя crypter.txt). Затем вызывается функция Crypt и ей передается значение переменной Line. После завершения работы функции зашифрованный текст сохраняется во вновь созданном файле. Закрываем оба открытых файла при помощи оператора Close.

PROCEDURE CryptP;

BEGIN

writeln;

write('Введитепутьиимяфайла: ');

readln(FileName);

write('Введитеключ: ');

readln(PassW);

Assign(F,FileName);

Assign(F1,'crypter.txt');

Rewrite(F1);

Reset(F);

while not EOF(F) do

begin

readln(F,Line);

line:=crypt(line);

writeln(F1,line);

end;

writeln;

writeln('Файл успешно зашифрован!!!');

Close(F);

Close(F1);

writeln;

write('Нажмите любую клавишу...');

ReadKey;

END;

При выборе второго пункта меню вызывается процедура дешифровки текста (PROCEDURE DecryptP;). Работа этой процедуры аналогична работе процедуры CryptP, за одним лишь исключением, мы вызываем функцию Decrypt вместо функции Crypt.