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

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

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

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

 

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

 

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





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

 

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

 

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

 

 

__________________________________________

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

 (шифр)

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

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

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

Оценка ___________________

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

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

 




СОДЕРЖАНИЕ:

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

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

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

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

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

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

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

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

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

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

Введение.

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

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


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

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


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

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

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


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

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

 Функция Password (FUNCTION Password(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 (FUNCTION Decrypt(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

Страницы: 1, 2



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.