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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифрование с помощью таблицы Виженера 
V
    Опции темы
eLRiz
  Дата 10.2.2012, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет. Очень нужна ваша помощь. Реализовать нужно шифрование с помощью таблицы Виженера, при этом используя StringGrid, и 3 поля ввода (исходное слово, ключ, результат). Вообщем шифрование сделал, там вроде всё более менее ясно. И вот уже целый день сижу с дешифрованием, всё как-то не так работает. В чем проблема понять не могу  smile 

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    Button1: TButton;
    Button2: TButton;
    LabeledEdit3: TLabeledEdit;
    procedure StringGrid1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.StringGrid1Click(Sender: TObject);
var I, J : integer;
  S : string;
  V : string;
begin
  S := 'абвгдеёжзийклмнопрстуфхцчшщьыъэюя';
  for I := 0 to 32 do
  begin
    for J := 0 to 32 do
    begin
      StringGrid1.Cells[J, I] := S[J+1];
    end;
    V := S[1];
    delete( S, 1, 1 );
    insert( V, S, 33 );
  end;
end;


function shifr( AKey : Integer ) : string;
var Keyword, NewS : string;
  I, J, P, P2, L, K : integer;
begin
  Form1.LabeledEdit2.Text := '';
  Keyword := Form1.LabeledEdit3.Text;
  if AKey = 1 then
  begin
    {Шифрование}
    L := 1;
    for I := 1 to length( Form1.LabeledEdit1.Text ) do
    begin
      if Form1.LabeledEdit1.Text[I] <> ' ' then
      begin
        P := 0;
        P2 := 0;
          for J := 0 to 32 do
          begin
            if Form1.StringGrid1.Cells[0, J] = Form1.LabeledEdit1.Text[I] then
              P := J;
            if Form1.StringGrid1.Cells[J, 0] = Keyword[L] then
                P2 := J;
          end;
          Form1.LabeledEdit2.Text := Form1.LabeledEdit2.Text + Form1.StringGrid1.Cells[P2, P];
        if L >= length( Keyword ) then
                L := 1
              else
                L := L + 1;
      end;
    end;
  end
  else
  begin
    {Дешифрование}
    L := 1;
    for I := 1 to length( Form1.LabeledEdit1.Text ) do
    begin
      if Form1.LabeledEdit1.Text[I] <> ' ' then
      begin
        P := 0;
        P2 := 0;
          for J := 0 to 32 do
          begin
            if Form1.StringGrid1.Cells[0, J] = Form1.LabeledEdit1.Text[I] then
            begin
              P := J;
              for K := 0 to 32 do
              begin
                if Form1.StringGrid1.Cells[K, P] = Keyword[L] then
                P2 := K;
              end;
           end;
          end;
          Form1.LabeledEdit2.Text := Form1.LabeledEdit2.Text + Form1.StringGrid1.Cells[P2, 0];
          if L >= length( Keyword ) then
            L := 1
          else
            L := L + 1;
      end;
    end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  shifr( 1 );
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  shifr( 2 );
end;

end.


Прикладываю файл с исходниками, чтоб проще было посмотреть

Присоединённый файл ( Кол-во скачиваний: 40 )
Присоединённый файл  fwefwefwefwefwefewf.zip 448,95 Kb
PM WWW   Вверх
eLRiz
  Дата 12.2.2012, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нашёл сам ошибку. Поэтому спасибо eLRiz, что помог  smile 

В коде строки с 95 по 103 включительно, необходимо заменить на:
Код

if Form1.StringGrid1.Cells[0, J] = Form1.LabeledEdit1.Text[I] then
begin
     P := J;
     for K := 0 to 32 do
     begin
          if Form1.StringGrid1.Cells[K, P] = Keyword[L] then
              P2 := K;
     end;
end;


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

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

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

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

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


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

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


 




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


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

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