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

 

Шифрование в 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 CryptStrEmptyStr 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 DecryptStrEmptyStr 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

Шифрование в Delphi Данные надо беречь. Сам посуди, обидно, если открытие ценой в сто миллионов енотов или рецепт безалкогольной водки, над которым ты корпе

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2019 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ