Программа кодирования и декодирования текстового файла
1 Постановка задачи
Нужно написать программу кодирования и декодирования текстового файла,
переписывая его в другой файл.
2 Спецификация задачи
Название задачи
Название задачи: Кодирование текстового файла.
Система программирования: Delphi 7.
Минимальные требования: Pentium III.
Описание
Пусть шифрование осуществляется методом простой одноалфавитной подстановки. Все символы исходного файла заменяются кодами, отличающимися от исходных символов на определенную величину, которая меняется от символа к символу. Для кодирования с помощью генератора случайных чисел создается кодировочная таблица, например, из 23 чисел (адресат знает о числе 23). Эта таблица представляет собой алфавит кодирования. Текст разбивается на группы символов, включая #13 #10, и каждый символ изменяется в соответствии с кодировочной таблицей, т.е. код первого символа увеличивается на первое число из таблицы, код второго – на второе число из таблицы и т.д. Для осуществления дешифровки кодировочную таблицу также необходимо записать в итоговый файл.
Управление режимами работы
Управление программой будет осуществляться в виде меню. В верхней части экрана программы расположен ряд кнопок меню, таких как Исходный файл, в котором содержится подменю: Новый файл, Добавить, Прочитать. Следующий пункт меню Кодирование в котором содержится подменю: Таблица кодировки, Кодирование файла. Следом за пунктом Кодирования идет пункт Проверка и за ним Выход. (Таблица 2.1)
Исходный файл | Кодирование | Проверка | Выход |
Новый файл | Таблица кодировки | ||
Добавить | Кодирование файла | ||
Прочитать |
Входные данные
Вводимые данные ограничиваются текстовым файлом, который выбирает пользователь.
Выходные данные
Выходными данными являются кодированный текстовый файл на экране и текстовом файле сохраняющимся на диске ПК.
Сам исходик
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, Buttons, StdActns, ActnList, XPMan;
type
TForm1 = class (TForm)
Memo1: TMemo;
Memo2: TMemo;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
ActionList1: TActionList;
EditCut1: TEditCut;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste;
EditSelectAll1: TEditSelectAll;
EditUndo1: TEditUndo;
EditDelete1: TEditDelete;
N6: TMenuItem;
Copy1: TMenuItem;
Cut1: TMenuItem;
Paste1: TMenuItem;
SelectAll1: TMenuItem;
Undo1: TMenuItem;
Delete1: TMenuItem;
XPManifest1: TXPManifest;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
procedure Button1Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure BitBtn1Click (Sender: TObject);
procedure BitBtn2Click (Sender: TObject);
procedure N2Click (Sender: TObject);
procedure N3Click (Sender: TObject);
procedure N5Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const
StartKey = 981; {Start default key}
MultKey = 12674; {Mult default key}
AddKey = 35891; {Add default key}
function Encrypt (const InString:string; StartKey,MultKey,AddKey:Integer): string;
function Decrypt (const InString:string; StartKey,MultKey,AddKey:Integer): string;
implementation
{$R *.dfm}
{$R-}
{$Q-}
{*******************************************************
* Standard Encryption algorithm — Copied from Borland *
*******************************************************}
function Encrypt (const InString:string; StartKey,MultKey,AddKey:Integer): string;
var
I : Byte;
begin
Result := '';
for I := 1 to Length (InString) do
begin
Result := Result + CHAR (Byte (InString[I]) xor (StartKey shr 8));
StartKey := (Byte (Result[I]) + StartKey) * MultKey + AddKey;
end;
end;
{*******************************************************
* Standard Decryption algorithm — Copied from Borland *
*******************************************************}
function Decrypt (const InString:string; StartKey,MultKey,AddKey:Integer): string;
var
I : Byte;
begin
Result := '';
for I := 1 to Length (InString) do
begin
Result := Result + CHAR (Byte (InString[I]) xor (StartKey shr 8));
StartKey := (Byte (InString[I]) + StartKey) * MultKey + AddKey;
end;
end;
{$R+}
{$Q+}
procedure TForm1.Button1Click (Sender: TObject);
begin
Memo2.Text:=Encrypt (Memo1.Text,StartKey,MultKey,AddKey);
end;
procedure TForm1.Button2Click (Sender: TObject);
begin
Memo1.Text:=Decrypt (Memo2.Text,StartKey,MultKey,AddKey);
end;
procedure TForm1.BitBtn1Click (Sender: TObject);
begin
Memo2.Text:=Encrypt (Memo1.Text,StartKey,MultKey,AddKey);
Memo2.Lines.SaveToFile ('Outfil.dat');
end;
procedure TForm1.BitBtn2Click (Sender: TObject);
begin
Memo1.Text:=Decrypt (Memo2.Text,StartKey,MultKey,AddKey);
end;
procedure TForm1.N2Click (Sender: TObject);
begin
Memo1.Lines.SaveToFile ('Inpfil.txt');
BitBtn1.Enabled:=true;
BitBtn2.Enabled:=true;
end;
procedure TForm1.N3Click (Sender: TObject);
begin
Memo1.Lines.LoadFromFile ('Inpfil.txt');
BitBtn1.Enabled:=true;
BitBtn2.Enabled:=true;
end;
procedure TForm1.N5Click (Sender: TObject);
begin
Close;
end;
end.