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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delphi: Полиалфавитный шифр Виженера 
V
    Опции темы
Solominka
Дата 24.10.2010, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В общем возникла такая проблема: нужно написать программу на Делфи с использованием этого самого полиалфавитного шифра Виженера.
НО! Это не тот алгоритм, который на каждом шагу валяется. Тут немного другой принцип  и я если честно не очень то понимаю как это реализовать.

Вот так прога должна выглядеть в итоге:

user posted image

Помогите пожалуйста реализовать!  smile 
PM MAIL   Вверх
Solominka
Дата 24.10.2010, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Неужели даже с алгоритмом совсем некому помочь? :(
PM MAIL   Вверх
amsoft
Дата 24.10.2010, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А что конкретно у тебя не получается?
Ничего сложного не вижу. В качестве таблицы для шифрования используй компонент TStringGrid, программно заполняй ее буквами и в процессе шифрования пробегай по всему тексту, подставляя соответствующие буквы из таблицы.
Или тебе готовый код нужен?
--------------------
"Кто бы ты ни был - не думай о себе слишком"Дельфин
PM   Вверх
Solominka
Дата 24.10.2010, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну компоненты то я и так вижу, какие нужны...
Только я без понятия, что сначала объявить и как это заполнить...
Я не понимаю, как именно прога работать должна... Т.е. что и из каких соображений перебирать...

Цитата

Или тебе готовый код нужен? 


А кому ж он не нужен! =__=

Но на готовый код я не рассчитываю, ибо это за меня писать никто не будет.
Мне бы хотя бы объяснили, что и как написать, а там я уж сама бы как-нибудь может написала.
Ибо мне даже сам принцип шифрования не ясен.

Это сообщение отредактировал(а) Solominka - 24.10.2010, 17:48
PM MAIL   Вверх
Specialistvlad
Дата 24.10.2010, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Аналогично, ничего сложного нету. Тебе не программу нужно написать, а сначала алгоритм составить. Исходя из твоего сообщения, кажется, что ты просто не хочешь этого делать.

Алгоритм довольно прост. Так на вскидку: есть таблица, с исходными данными, по пересечению ячеек нужно находить нужную букву и подставлять её в цикле.
PM MAIL   Вверх
amsoft
Дата 24.10.2010, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Составляем таблицу для шифрования:

первая строка - алфавит (можно заполнить программно, пробежавшись по ячейкам и заполняя их символами, в этом тебе может помочь функция Chr(x) - первый символ будет Chr(224) - буква 'а', второй - Chr(225) и т.д. до Chr(255) - буква 'я')
Остальные строки заполняешь аналогично, только начинать будешь не с символа Chr(224), а с символа 'ш' (код буквы можно узнать с помощью функции Ord('ш')), таким образом вторая ячейка будет содержать символ Chr(Ord('ш')+1) и так далее, пока не дойдешь до 'я', затем начинаешь опять с Chr(224)...
Надеюсь, выразился правильно.

Далее можно переходить непосредственно к шифрованию.
--------------------
"Кто бы ты ни был - не думай о себе слишком"Дельфин
PM   Вверх
Solominka
Дата 24.10.2010, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

и подставлять её в цикле. 


в каком цикле? =__=

Цитата

Исходя из твоего сообщения, кажется, что ты просто не хочешь этого делать.


Ну не понимаю я... НЕ ПОНИМАЮ! уж извините...

Добавлено через 1 минуту и 6 секунд
amsoft, кажется начинаю понимать, спасибо)
PM MAIL   Вверх
amsoft
Дата 24.10.2010, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Solominka
если будут вопросы, выкладывай сюда свой код, будем разбираться  smile 
--------------------
"Кто бы ты ни был - не думай о себе слишком"Дельфин
PM   Вверх
Solominka
Дата 24.10.2010, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В общем нашла похожий программный код, попыталась преобразовать, но запуталась и заполняет оно всё не совсем так, как надо...
Вот исходник для наглядности:
ИСХОДНИК

Сам код:

Код

var
  Form1: TForm1;
  alfvt, kluch, sms, brr: String;
  i, j, g,l, raz, ind, n, dlina_alfvt, dlina_kluch, dlina_sms,dlina_bez_probl: Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  alfvt:= 'абвгдежзийклмнопрстуфхцчшщъыьэюя';
  kluch:= Edit1.Text;
  sms:= Edit2.Text;
  ind:= 0;
  n:= 0;
  dlina_bez_probl:=0;
  dlina_alfvt:= length(alfvt);
  dlina_kluch:= length(kluch);
  dlina_sms:= length(sms);

  for j:= 0 to Dlina_alfvt-1 do
  begin
    StringGrid1.Cells[j, 0]:= alfvt[j+1];
  end;

  for i:= 1 to Dlina_kluch do
  begin
    StringGrid1.Cells[0, i]:= kluch[i];
  end;

  for i:= 1 to Dlina_kluch do
  begin
    for j:= 1 to Dlina_alfvt do
    begin
      if StringGrid1.Cells[0, i] = alfvt[j] then
      begin
        raz:= 0;
        for g:= 1 to Dlina_alfvt-j do
        begin
          StringGrid1.Cells[g, i]:= alfvt[g+j];
          raz:= raz + 1;
        end;
        for g:= Dlina_alfvt-j+1 to Dlina_alfvt-1 do
        begin
          StringGrid1.Cells[g, i]:= alfvt[g-raz];
        end;
      end;
    end;
  end;

  raz:=0;
  For j:= 0 to Dlina_sms-1 do
  Begin
    if j + 1 = raz + 1 + n*Dlina_kluch then
    begin
      StringGrid2.Cells[j, 1]:= IntToStr(raz + 1);
      StringGrid2.Cells[j, 2]:= kluch[raz + 1];
    end;

    if sms[j+1] <> ' ' then
    begin
      StringGrid2.Cells[ind,1]:= sms[j+1];
      ind:= ind + 1;
      dlina_bez_probl:= dlina_bez_probl + 1;
    end;
    raz:= raz + 1;
    if raz = 4 then
    begin
      n:= n+1;
      raz:=0;
    end;
  end;

  g:=1;
  for j:= 0 to dlina_bez_probl-1 do
  begin
    if StringGrid2.Cells[j, 1] = kluch[g] then
    begin
      for i:= 0 to dlina_alfvt-1 do
      begin
       if StringGrid2.Cells[j, 2]= StringGrid1.Cells[i, 0] then
       begin
         StringGrid2.Cells[j, 3]:= StringGrid1.Cells[i, g];
         if g = 4 then g:= 0;
         g:=g+1;
       end;
      end;
    end;
  end;

  brr:= '';
  for j:=0 to dlina_bez_probl-1 do
  begin
    brr:= brr + StringGrid2.Cells[j,3];
  end;
  Edit3.Text:= brr;
  Edit4.Text:= kluch;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  brr:= Edit3.Text;
  kluch:= Edit4.Text;

  for j:= 0 to dlina_bez_probl do
  begin
    StringGrid3.Cells[j, 0]:= brr[j+1];
  end;

  n:=0;raz:=0;
  For j:= 0 to dlina_bez_probl-1 do
  Begin
    if j + 1 = raz + 1 + n*Dlina_kluch then
    begin
      StringGrid4.Cells[j, 0]:= IntToStr(raz + 1);
      StringGrid4.Cells[j, 1]:= kluch[raz + 1];
    end;
    raz:= raz + 1;
    if raz = 4 then
    begin
      n:= n+1;
      raz:=0;
    end;
  end;

  for j:= 0 to Dlina_alfvt-1 do
  begin
    StringGrid3.Cells[j, 2]:= alfvt[j+1];
  end;

  for i:= 1 to Dlina_kluch do
  begin
    StringGrid4.Cells[0, i]:= kluch[i];
  end;

  for i:= 1 to Dlina_kluch do
  begin
    for j:= 1 to Dlina_alfvt do
    begin
      if StringGrid4.Cells[0, i] = alfvt[j] then
      begin
        raz:= 0;
        for g:= 1 to Dlina_alfvt-j do
        begin
          StringGrid4.Cells[g, i]:= alfvt[g+j];
          raz:= raz + 1;
        end;
        for g:= Dlina_alfvt-j+1 to Dlina_alfvt-1 do
        begin
          StringGrid4.Cells[g, i]:= alfvt[g-raz];
        end;
      end;
    end;
  end;

  g:=1;
  for j:= 0 to dlina_bez_probl-1 do
  begin
    if StringGrid4.Cells[j, 0] = kluch[g] then
    begin
      for i:= 0 to dlina_alfvt-1 do
      begin
       if StringGrid3.Cells[j, 0]= StringGrid4.Cells[i, g] then
       begin
         StringGrid4.Cells[j, 1]:= StringGrid4.Cells[i, 0];
         if g = 4 then g:= 0;
         g:=g+1;
         Break;
       end;
      end;
    end;
  end;

  brr:= '';
  for j:=0 to dlina_bez_probl-1 do
  begin
    brr:= brr + StringGrid4.Cells[j,1];
  end;
  Edit5.Text:= brr;

end;
end.


PM MAIL   Вверх
Specialistvlad
Дата 24.10.2010, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да не нужно чужое находить. Напиши свое, поймешь хоть тогда. А совет как понять. Возьми листочек и пиши посделовательность действий, которая по твоему мнению нужна для выполнении программы. Например. Первое: Выставить ряд букв исходя из шифра. Следующее, и так далее... И только когда у тебя будет правильный алгоритм, ты с легкостью поймешь, что делать.
Давай вместе составлять, но только если это не подразумевает по собой напиши мне....

Это сообщение отредактировал(а) Specialistvlad - 24.10.2010, 23:58
PM MAIL   Вверх
Solominka
Дата 25.10.2010, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Specialistvlad, писать уже ничего не нужно (как минимум потому, что написано уже, выше).

Нужно просто сделать так, чтобы из четырёх  StringGrid-ов всё выводилось в один, и всё =__=
Чем я сейчас и занимаюсь (и потихоньку получается).

Ибо писать с нуля - не располагаю временем, увы и ах, т.к. для этого я Делфи знаю довольно плохо, что уж тут скрывать. И в данном случае при таком раскладе, мне быстрее доделать немного чужой исходник, чем пытаться составить свой алгоритм, который я пойму неизвестно после какой по счёту попытки, потом объявить кучу функций и не запутаться в них же, родимых...
Извините, но когда авраал - тут не до качества, к сожалению...

Благодарю за предложенную помощь с алгоритмом, но обратись я раньше хотя бы дня на 3 - это возможно, имело бы для меня какой-то реальный смысл.
PM MAIL   Вверх
casinosoftguru
Дата 25.10.2010, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



советую повнимательнее рассмотреть пример там левые какие то переменные типа Sms или brr они с твоим скриншотом никак не сходятся..
достаточно будет расписать не на бумажке а в комментариях к коду каждое действие и тогда станет все понятно что тебе нужно из этого кода а что не нужно)
PM MAIL   Вверх
Solominka
Дата 25.10.2010, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



casinosoftguru, просто прога была с 8-ю гридами, а надо "собрать" всё в 4 грида, плюс порядок слегка другой...
А принцип тот же))
А переменные эти там как бы нужны)))

Короче из этого: user posted image надо сделать это user posted image.

Только и всего 


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

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

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

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

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


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

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


 




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


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

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