Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм Плейфера 
:(
    Опции темы
Garik1995
Дата 23.2.2015, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 15.10.2014

Репутация: нет
Всего: нет



Пишу алгоритм шифрования Плейфера. Возникла проблема,когда я ввожу например слово из пяти букв, то шифруется слово из 4 букв и расшифровывается тоже из 4 букв. Не могу разобраться где ошибка.
Код

unit U_1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    Button1: TButton;
    Button2: TButton;
    Label4: TLabel;
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const
A:array[1..5,1..5] of char = (('L','Z','Q','C','P'),
                              ('A','G','N','O','U'),
                              ('R','D','M','I','F'),
                              ('K','Y','H','V','S'),
                              ('X','B','T','E','W'));
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
ir,i,j,n,k:integer;
x,y,w,e:1..5;
begin
Memo1.Text:=AnsiUpperCase(Memo1.Text);
Memo2.Text:=Memo1.Text;
for ir:=0 to Memo1.Lines.Count do begin
s:='';
n:=length(Memo1.Lines[ir]);
for i:=1 to n do
if (Memo1.Lines[ir][i]=Memo1.Lines[ir][i+1]) and
(not (Memo1.Lines[ir][i] in ['0','1','2','3','4','5','6','7','8','9']))
then
s:=s+Memo1.Lines[ir][i]+'Ъ'
else
s:=s+Memo1.Lines[ir][i];
n:=0;
for i:=1 to length(s) do
if not (Memo1.Lines[ir][i] in ['0','1','2','3','4','5','6','7','8','9']) then
inc(n);
if n mod 2<>0 then
s:=s+'Ъ';
Memo1.Lines[ir]:=s;
i:=1;
n:=length(s);
s:='';
while i<=n do begin
k:=0;
if (Memo1.Lines[ir][i] in ['0','1','2','3','4','5','6','7','8','9']) then
begin
s:=s+Memo1.Lines[ir][i];
i:=i+1
end
else
begin
for x:=1 to 5 do
for y:=1 to 5 do
if Memo1.Lines[ir][i]=a[x,y] then begin
//Ищем по строкам
for e:=1 to 5 do
if Memo1.Lines[ir][i+1]=a[x,e] then
begin
if y+1=6 then
s:=s+a[x,1]
else
s:=s+a[x,y+1];
if e+1=6 then
s:=s+a[x,1]
else
s:=s+a[x,e+1];
k:=k+1
end;
//Ищем по столбцам
if k=0 then
for fw:=1 to 5 do
if Memo1.Lines[ir][i+1]=a[w,y] then
begin
if x+1=6 then
s:=s+a[1,y]
else
s:=s+a[x+1,y];
if w+1=6 then
s:=s+a[1,y]
else
s:=s+a[w+1,y];
k:=k+1
end;
//В случае если нет символов
if k=0 then
for w:=1 to 5 do
for e:=1 to 5 do
if Memo1.Lines[ir][i+1]=a[w,e] then
s:=s+a[w,y]+a[x,e]
end;
i:=i+2;
end;
end;
Memo1.Lines[ir]:=s;
end;
s:=Memo1.Text;
Memo1.Text:=Memo2.Text;
Memo2.Text:=s;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
s:string;
ir,i,j,n,k:integer;
x,y,w,e:1..5;
begin
Memo3.Clear;
Memo3.Text:=Memo2.Text;
for ir:=0 to Memo2.Lines.Count do begin
s:='';
n:=length(Memo2.Lines[ir]);
i:=1;
while i<=n do begin
k:=0;
if (Memo2.Lines[ir][i] in ['0','1','2','3','4','5','6','7','8','9']) then
begin
s:=s+Memo2.Lines[ir][i];
i:=i+1
end
else
begin
for x:=1 to 5 do
for y:=1 to 5 do
if Memo2.Lines[ir][i]=a[x,y] then begin
//Ищем по строкам
for e:=1 to 5 do
if Memo2.Lines[ir][i+1]=a[x,e] then
begin
if y-1=0 then
s:=s+a[x,5]
else
s:=s+a[x,y-1];
if findj-1=0 then
s:=s+a[x,5]
else
s:=s+a[x,e-1];
k:=k+1
end;
//Ищем по столбцам
if k=0 then
for w:=1 to 5 do
if Memo2.Lines[ir][i+1]=a[w,y] then
begin
if x-1=0 then
s:=s+a[5,y]
else
s:=s+a[x-1,y];
if w-1=0 then
s:=s+a[5,y]
else
s:=s+a[w-1,y];
k:=k+1
end;
//В случае если нигде нет
if k=0 then
for w:=1 to 5 do
for e:=1 to 5 do
if Memo2.Lines[ir][i+1]=a[w,e] then
s:=s+a[w,y]+a[x,e]
end;
i:=i+2;
end;
end;
n:=length(s);
Memo2.Lines[ir]:='';
for i:=1 to n do
if s[i]<>'Ъ' then
Memo2.Lines[ir]:=Memo2.Lines[ir]+s[i];
end;
s:=Memo2.Text;
Memo2.Text:=Memo3.Text;
Memo3.Text:=s;
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
var
i,j:byte;
begin
Memo1.Text:='';
Memo2.Text:='';
Memo3.Text:='';
//Заполняем матрицу размером 5 на 5
for i := 0 to 4 do
for j := 0 to 4 do
StringGrid1.Cells[i,j]:=A[i+1,j+1];
end;
 
 
end.


Это сообщение отредактировал(а) Garik1995 - 23.2.2015, 15:47

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  Lab_1.rar 208,87 Kb
PM MAIL   Вверх
Illusion Dolphin
Дата 23.2.2015, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Отформатируйте, пожалуйста, код, а то глаза слезятся. 
Цитата

tabi,tabj,findi,findj:1..5;

А оно так работает? o_0


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Garik1995
Дата 23.2.2015, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 15.10.2014

Репутация: нет
Всего: нет



Цитата(Illusion Dolphin @ 23.2.2015,  15:19)
Отформатируйте, пожалуйста, код, а то глаза слезятся. 
Цитата

tabi,tabj,findi,findj:1..5;

А оно так работает? o_0

Да, но с ошибками

Добавлено через 14 минут и 56 секунд
Цитата(Illusion Dolphin @ 23.2.2015,  15:19)
Отформатируйте, пожалуйста, код, а то глаза слезятся. 
Цитата

tabi,tabj,findi,findj:1..5;

А оно так работает? o_0

Отредактировал
PM MAIL   Вверх
Illusion Dolphin
Дата 23.2.2015, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата

Да, но с ошибками 

Прикольно, не знал smile 

По теме - я честно пытался понять смысл, но не смог. 
Ваша проблема в том что всё обрабатывается парами 
Код

i:=i+2;

А ещё слово повторяющихся символов никогда не шифруется, например "aaaa", а слова без повторяющихся символов с длинной кратной двум что-то делает.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Garik1995
Дата 23.2.2015, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 15.10.2014

Репутация: нет
Всего: нет



Цитата(Illusion Dolphin @ 23.2.2015,  16:03)
Цитата

Да, но с ошибками 

Прикольно, не знал smile 

По теме - я честно пытался понять смысл, но не смог. 
Ваша проблема в том что всё обрабатывается парами 
Код

i:=i+2;

А ещё слово повторяющихся символов никогда не шифруется, например "aaaa", а слова без повторяющихся символов с длинной кратной двум что-то делает.

Понял,спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0730 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.