Реферат по предмету "Информатика, программирование"


Шифрование в Delphi

Данные надо беречь. Сам посуди, обидно, если открытие ценой в сто миллионов енотов или рецепт безалкогольной водки, над которым ты корпел три вечера в мрачном подвале нелегального компьютерного клуба, — уплывет к злостному ленивому конкуренту, который, пользуясь твоим похмельем, наложил грязную лапу на приватные дискеты с ценнейшей инфой?! Дальше можно не продолжать. Шифруем, шифруем, шифруем!..


Добрый дядюшка Borland предоставил нам несколько занятных функций для работы со строками, о которых не все знают. Сосредоточены они в модуле StrUtils.pas. Такие функции, как RightStr, LeftStr совмещают стандартные команды Copy и Delete: так, LeftStr возвращает значение левой части строки до указанной вами позиции (что вытворяет RightStr, догадайся сам), а функция ReverseString и вовсе делает зеркальное отображение данной строки: 321 вместо 123. Используем ее в особенности, чтобы осложнить жизнь хитрому дешифровщику.


Алгоритм шифрования будет прост, как Win 3.1. С каждым символом кодируемого документа проделаем следующее:


1. Преобразуем символ в число командой Ord.


2. Преобразуем каждый символ пользовательского пароля в число и сумму этих чисел прибавим к полученному в пункте 1.


3. От результата отнимаем число, равное позиции данного символа. То есть буковки будут шифроваться по-разному в зависимости от их позиции в строке :).


4. То, что получилось, запишем обратно из чисел в символы командой Chr. Как видишь, после всех наших манипуляций этот символ уже будет другим.


5. Запишем всю строку навыворот командой ReverseString.


Дешифровка, как ты догадываешься, будет производиться в обратном порядке.


Теперь, когда алгоритм намертво засел в голове, реализуем соответствующую программу. Внимание! Не исключено, что это будет первая твоя программа с настоящим синтаксисом команд:


<команда> <путь> <пароль>


— так будет выглядеть он в консоли нашего приложения (да, оно будет консольным!). Команд всего две: crypt и decrypt — соответственно зашифровать и дешифровать файл, путь к которому указывается после пробела, а затем — твой пароль. НЕ ЗАБУДЬ ЕГО! Предупреждаю совершенно серьезно. Запомнил? В бой!


Crypt C:\file.txt linuxmustsurvive


— закодируем File.txt. Результат (зашифрованный текст) сохраниться в той же директории, что и исполняемый файл нашего приложения под именем Translated_File.txt.


Decrypt C:\Translated_file.txt linuxmustsurvive


— дешифровка.


Реализовывается это вот как:


program Crypter;


{$APPTYPE CONSOLE}


uses


SysUtils,


StrUtils; //!!


var


F, //входящий файл


F1: TextFile; //результат (файл с переводом)


ToDo, FileName, PassW, Line, TranslatedFile: string;


position, IsCrypt: integer;


//находим сумму числовых значений символов пароля


function Password(Psw: string): integer;


var


i,res: integer;


begin


res:=0;


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


result:=res;


end;


function Crypt(CryptStr: string): string;


var


s: string;


i: integer;


begin


if CryptStr<>EmptyStr then


for i:=1 to Length(CryptStr) do begin


s:=LeftStr(CryptStr,1);


CryptStr:=RightStr(CryptStr,Length CryptStr)-1);


//ШИФРОВКА:


s:=chr(ord(s[1])+Password(PassW)-i);


result:=result+s;


end;


result:=ReverseString(result);


end;


function Decrypt(DecryptStr: String): String;


var


i: integer;


s: String;


begin


DecryptStr:=ReverseString(DecryptStr);


if DecryptStr<>EmptyStr then


for i:=1 to Length(DeCryptStr) do begin


s:=LeftStr(DeCryptStr,1);


DeCryptStr:=RightStr(DeCryptStr,Length DeCryptStr)-1);


//ДЕШИФРОВКА:


result:=result+chr(ord(s[1])-password(PassW)+i);


end;


end;


begin


while true do begin


isCrypt:=0;


writeln(#10+'Crypter >'+#10);


//Какую команду ввел юзер?


readln(ToDo);


if UpperCase(ToDo)='EXIT' then Exit;


if AnsiContainsText(ToDo,'decrypt') then isCrypt:=1


else if AnsiContainsText(ToDo,'crypt') then isCrypt:=2;


//прочитав команду, удаляем ее из строки и читаем дальше


position:=pos(' ',ToDo);


if position>0 then ToDo:=RightStr(ToDo,Length(ToDo)-position);


//Читаем путь к файлу


position:=pos(' ',ToDo);


if position>0 then FileName:=LeftStr(ToDo,position-1);


//Читаем пароль


PassW:=RightStr(ToDo,Length(ToDo)-position);


//Всё правильно? Начинаем!


if (isCrypt<=0) or (PassW=EmptyStr) or (not FileExists(FileName)) then writeln('Wrong command')


else begin


TranslatedFile:=ExtractFilePath(paramStr(0)) + 'translated_' + ExtractFileName(FileName);


//соединяемся с файлами


AssignFile(F, FileName);


AssignFile(F1, TranslatedFile);


//переходим в начало файла


Rewrite(F1);


Reset(F);


//читаем строки, пока не дойдем до конца файла


while not EOF(F) do begin


//читаем из переводимого файла


ReadLn(F, Line);


if isCrypt=1 then Line:=Decrypt(Line);


if isCrypt=2 then Line:=Crypt(Line);


//записываем в файл с переводом


Writeln(F1, Line);


end;


//отсоединямся от файлов


CloseFile(F);


CloseFile(F1);


end;


end;


end.


Вот, собственно, и всё. Еще раз напоминаю, что результат (файл с переводом) сохранится В ТОЙ ЖЕ ДИРЕКТОРИИ, что и наше приложение, а не в той, где лежит исходный файл. В заключение процитирую отрывок из статьи «Криптография в C++» в номере 3.03 журнала «Хакер»:


(с) Николай «GorluM» Андреев


Но я хочу тебя предупредить: в нашей стране, согласно указу № 334 от 1995 года, производить и распространять любые шифрующие средства можно, только имея лицензию ФАПСИ. Соответственно, шифровать нельзя :). Поэтому пиши программы только для личного пользования и только в познавательных целях.



Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Образ автора в романе А.С.Пушкина "Евгений Онегин"
Реферат Философский анализ общества
Реферат Некоторые принципы словарного описания русской разговорной речи (Постановка задачи)
Реферат Контроль за расходами физических лиц
Реферат Проект механического цеха
Реферат Нагорный район
Реферат Исследование и анализ проблем пенсионеров и социально-геронтологические концепции
Реферат Технологическое образование школьников
Реферат Организация производства на предприятиях химической промышленности
Реферат История основания и развития Оренбурга
Реферат Почему искажается историческая правда методологический аспект проблемы
Реферат Изучение степени новизны товаров и услуг
Реферат Правовые отношения понятие, структура, содержание
Реферат Из истории Москвы XIX века
Реферат Синтез операционных автоматов