Реферат: Шифровка и дешифровка текста

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

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

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

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

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

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

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

__________________________________________

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

 (шифр)

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

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

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

Оценка___________________

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

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

СОДЕРЖАНИЕ:

 

Содержание………………………………………………………………… стр.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.

FUNCTIONPassword(Psw: string): integer;

VAR i,res:integer;

BEGIN

 res:=0;

 for i:=1to 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и складываются, при этом между значениями вставляются пробелы (это необходимодля того, чтобы дешифратор по пробелам мог отделить числа, иначе он принял быих за одно большое число).

FUNCTIONCrypt(CryptStr: string): string;

VAR s,s1:string;

    i,rez:integer;

BEGIN

     s1:='';

     for i:=1 tolength(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.

FUNCTIONDecrypt(DecryptStr: string): string;

VARXpos,i,v,e: integer;

   Code,s1: string;

BEGIN

    s1:='';

     fori:=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.        Выход

PROCEDUREMenu;

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;

     untilmen=3;

END;

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

PROCEDURECryptP;

BEGIN

    writeln;

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

    readln(FileName);

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

    readln(PassW);

    Assign(F,FileName);

    Assign(F1,'crypter.txt');

    Rewrite(F1);

    Reset(F);

     whilenot 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.

PROCEDUREDecryptP;

BEGIN

    writeln;

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

    readln(FileName);

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

    readln(PassW);

    Assign(F,FileName);

    Assign(F1,'crypter.txt');

    Rewrite(F1);

    Reset(F);

     whilenot EOF(F) do

     begin

          readln(F,Line);

         line:=decrypt(line);

         writeln(F1,Line);

     end;

    writeln;

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

     Close(F);

    Close(F1);

    writeln;

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

     ReadKey;

END;

 При выборе третьегопункта меню программа завершает свою работу.

Описание входных ивыходных данных.

 

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

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


Заключение.

 

 Данная программапродемонстрировала хорошую работоспособность. Имеет высокую степень защитызашифрованного текста, без ключя такой текст расшифровать достаточно сложно,даже зная алгоритм шифрования. У данной программы есть один значительныйнедостаток – размер зашифрованного файла увеличивается по сравнению с исходнымпримерно в 3 раза.


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

 

1.        «Основыалгоритмизации и программирование», Е. Н. Сафьянова, учебное пособие, Томск, 2000 г.


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

 

PROGRAMCrypter;

USES crt;

VAR f,f1:Text;

   FileName,PassW,Line: string;

    men:integer;

 

{Преобразуем пароль вчисловое значение}

FUNCTIONPassword(Psw: string): integer;

VAR i,res:integer;

BEGIN

    res:=0;

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

     Password:=res;

END;

 

{Функция шифрованиятекста}

FUNCTIONCrypt(CryptStr: string): string;

VAR s,s1:string;

    i,rez:integer;

BEGIN

    s1:='';

     fori:=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;

 

{Функция дешифровкитекста}

FUNCTIONDecrypt(DecryptStr: string): string;

VARXpos,i,v,e: integer;

   Code,s1: string;

BEGIN

    s1:='';

     fori:=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;

 

{Процедурашифрованиятекста}

PROCEDURECryptP;

BEGIN

     writeln;

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

    readln(FileName);

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

    readln(PassW);

    Assign(F,FileName);

    Assign(F1,'crypter.txt');

    Rewrite(F1);

    Reset(F);

     whilenot EOF(F) do

     begin

         readln(F,Line);

         line:=crypt(line);

         writeln(F1,line);

     end;

    writeln;

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

     Close(F);

    Close(F1);

    writeln;

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

     ReadKey;

END;

 

{Процедура дешифровкитекста}

PROCEDUREDecryptP;

BEGIN

    writeln;

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

    readln(FileName);

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

    readln(PassW);

    Assign(F,FileName);

    Assign(F1,'crypter.txt');

    Rewrite(F1);

    Reset(F);

     whilenot EOF(F) do

     begin

         readln(F,Line);

         line:=decrypt(line);

         writeln(F1,Line);

     end;

    writeln;

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

     Close(F);

    Close(F1);

    writeln;

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

     ReadKey;

END;

{Процедура выводаосновного меню}

PROCEDUREMenu;

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;

     untilmen=3;

END;

 

BEGIN

    ClrScr;

     Menu;

END.


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

 

 При запуске программы наэкран было выведено следующее:

Программа шифровки идешифровки текста!!!

 

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

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

3.Выход

 

Выберите пункт меню:

 

При выборе первого пунктаменю, программа предложила ввести имя файла, который необходимо зашифровать иключ. Имя файла было введено следующее «c:\a1.txt», а ключ «crypter». Файл содержал следующий текст: «Здравствуйте!!! Васприветствует программа Crypter.». В результате шифрования в папке с программойпоявился файл «crypter.txt», который содержал следующее: «9761005 1017 1001 1003 1018 1019 1003 1020 1010 1019 1006 810 810 810 9711001 1018 809 1016 1017 1009 1003 1006 1019 1018 1019 1003 1020 1006 1019 8091016 1017 1015 1004 1017 1001 1013 1013 1001 809 844 891 898 889 893 878891 823».

При выборе второго пунктаменю, программа предложила ввести имя файла, который необходимо расшифровать иключ. Был введен файл «c:\a2.txt», а ключ «crypter». Файл содержал следующий текст: «976 1005 1017 1001 10031018 1019 1003 1020 1010 1019 1006 810 810 810 971 1001 1018 809 1016 10171009 1003 1006 1019 1018 1019 1003 1020 1006 1019 809 1016 1017 1015 1004 10171001 1013 1013 1001 809 844 891 898 889 893 878 891 823». В результатедешифровки в папке с программой появился файл «crypter.txt»,который содержал следующее: «Здравствуйте!!! Вас приветствует программаCrypter.». Затем был выбран тот же файл, но ключ изменили на 1, в результатедешифровки получилась следующее:«џјИёєЙКєЛБКЅщщщљёЙшЗИАєЅКЙКєЛЅКшЗИЖ»ИёДДёш_JQHL=J_». Это говорит о корректнойработе программы.

При выборе третьегопункта меню программа завершила свою работу.

еще рефераты
Еще работы по информатике, программированию