
14.11.2007, 12:53
|
Начинающий
|
|
Регистрация: 05.01.2007
Адрес: Днепропетровск
Сообщения: 141
Репутация: 25
|
|
Код:
var
Form1: TForm1;
const alphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя1234567890АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ,.;:-+_()!?"№%*/=\|@#$^~`''&abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
implementation
uses About;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
Memo2.Lines.LoadFromFile(OpenDialog1.FileName);
end;
end;
//процедура шифрования текста
procedure TForm1.Button2Click(Sender: TObject);
label h, h1;
Var
key, wifr, wifr2, klu4 : String;
kkk, w, p,t, k, jj, i, j : integer;
dlina_klu4a, dlina_text, dlina_alphabet : integer;
begin
key := (edit1.Text) ; // ключ (строка)
dlina_text := 0;
dlina_klu4a := length(key); // длина ключа (строки)
dlina_alphabet := length(alphabet); //длина алфавита
// проверка на наличие текста и ключа
if (memo1.Lines[0] = '') or (key = '') then // если нет текста или ключа
begin
Application.MessageBox('Введите текст и ключ!','Error');
exit;
end;
//шифрование Вижинера
for i:=0 to memo1.lines.count-1 do
begin
wifr :=''; wifr2 :=''; klu4 := '';
wifr := Memo1.Lines[i]; //i-я строка Memo1 в wifr для преобразований
dlina_text := length(Memo1.Lines[i]); // длина текста
//чтобы длина ключа соответствовала длине текста
kkk := dlina_text div dlina_klu4a + 1;
for t := 1 to kkk do
klu4 := klu4 + key;
for j:=1 to length(wifr) do
begin
t:=0; k:=0;
for p :=1 to dlina_alphabet do
begin
if wifr[j] = alphabet[p] then t := p; //t-номер символа открытого текста
if klu4[j] = alphabet[p] then k := p; //k-номер символа ключа
end;
w := (t + k) mod dlina_alphabet; //w - номер символа зашифрованного символа
if w = 0 then w := dlina_alphabet;
jj:=1;
h: if jj <= dlina_alphabet then
begin
if w = jj then
begin wifr2 := wifr2 + alphabet[jj];
goto h1;
end
else
jj:=jj+1;
goto h;
end;
h1: ;
end;
Memo1.Lines[i] := wifr2; //в i-ю строку Memo2 помещаем защифрованную i-ю строку Memo1
end;
memo2.Clear;
Memo2.Lines.Add(Memo1.Lines.GetText);
end;
//процедура расшифрования текста
procedure TForm1.Button4Click(Sender: TObject);
label h, h1;
Var
key, wifr,wifr2, klu4 : String;
kkk, w, t, k, jj, i, j,p : integer;
dlina_klu4a, dlina_text, dlina_alphabet : integer;
begin
key := (edit1.Text) ; // ключ (строка)
dlina_text := 0;
dlina_klu4a := length(key); // длина ключа (строки)
dlina_alphabet := length(alphabet); //длина алфавита
// проверка на наличие текста и ключа
if (memo1.lines[0] = '') or (key = '') then // если нет текста или ключа
begin
Application.MessageBox('Введите текст и ключ!','Error');
end;
//расшифрование Вижинера
for i:=0 to memo1.lines.count-1 do
begin
wifr :=''; wifr2 :=''; klu4 := '';
wifr := Memo1.Lines[i]; //i-я строка Memo1 в wifr для преобразований
dlina_text := length(wifr); // длина текста
//чтобы длина ключа соответствовала длине текста
kkk := (dlina_text div dlina_klu4a) + 1;
for t := 1 to kkk do
klu4 := klu4 + key;
for j:=1 to length(wifr) do
begin
t:=0; k:=0;
for p :=1 to dlina_alphabet do
begin
if wifr[j] = alphabet[p] then t := p; //t-номер символа открытого текста
if klu4[j] = alphabet[p] then k := p; //k-номер символа ключа
end;
if (t-k) > 0 then
w := t-k else w := (t+dlina_alphabet) - k; //w-номер символа расшифр.текста
jj:=1;
h: if jj <= dlina_alphabet then
begin
if w = jj then
begin wifr2 := wifr2 + alphabet[jj];
goto h1;
end
else
jj:=jj+1;
goto h;
end;
h1: ;
end;
Memo1.Lines[i] := wifr2;
end;
memo2.Clear;
Memo2.Lines.Add(Memo1.Lines.GetText);
end;
|