Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.11.2007, 12:56
uekmyfp uekmyfp вне форума
Прохожий
 
Регистрация: 12.11.2007
Сообщения: 6
Репутация: 10
По умолчанию Программа шифрования и дешифрования по Виженеро

Не могу сообразить, как написать программу, которая бы шифровала и дешифровала по Виженеру. плиз помогите, зачет нужно сдать!
Ответить с цитированием
  #2  
Старый 13.11.2007, 23:17
~ SaM ~ ~ SaM ~ вне форума
Начинающий
 
Регистрация: 05.01.2007
Адрес: Днепропетровск
Сообщения: 141
Репутация: 25
По умолчанию Лови!:)

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
var
  Form1: TForm1;
 
const alphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя1234567890АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ,.;:-+_()!?"№%*/=\|@#$^~`''&abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
 
implementation
 
uses About;
 
{$R *.dfm}
 
//шифрование Вижинера
for i:=0 to memo1.lines.count-1 do
begin
     wifr :=''; wifr2 :='';  klu4 := '';
     wifr := Memo1.Lines[i];
 
 
   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;
                  if klu4[j] = alphabet[p] then   k := p;   
            end;
 
         w := (t + k) mod dlina_alphabet;
 
     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;
end;
    memo2.Clear;
    Memo2.Lines.Add(Memo1.Lines.GetText);
end;
//расшифрование текста
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
 
for i:=0 to memo1.lines.count-1 do
begin
     wifr :=''; wifr2 :='';  klu4 := '';
     wifr := Memo1.Lines[i];
     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;
                  if klu4[j] = alphabet[p] then   k := p;
            end;
    if (t-k) > 0 then
            w := t-k   else  w := (t+dlina_alphabet) - k;
           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;
Ответить с цитированием
  #3  
Старый 14.11.2007, 00:11
Аватар для Winny
Winny Winny вне форума
Продвинутый
 
Регистрация: 26.05.2007
Адрес: Планета земля, Россия, Москва
Сообщения: 620
Репутация: 30
По умолчанию

Твой код у мя не работает. Выдает Devision By Zero. Выложи весь исходник. Чисто интересно.
__________________

Ответить с цитированием
  #4  
Старый 14.11.2007, 12:53
~ SaM ~ ~ SaM ~ вне форума
Начинающий
 
Регистрация: 05.01.2007
Адрес: Днепропетровск
Сообщения: 141
Репутация: 25
По умолчанию

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
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;
Ответить с цитированием
  #5  
Старый 14.11.2007, 12:58
~ SaM ~ ~ SaM ~ вне форума
Начинающий
 
Регистрация: 05.01.2007
Адрес: Днепропетровск
Сообщения: 141
Репутация: 25
По умолчанию

to Winni

Не знаю почему у тебя ошибка деления на 0, но я пару недель назад сдавал в универе эту лабу и никаких проблем не было, НО единственный минус в том, что я не смог додуматься как при шифровании/дешифровании сохранять абзацы в тексте! Может кто поможет?
А вобще сейчас делаю следующую лабу (тоже по Вижинеру) с автоключом, который в реестр пишется! Когда доделаю - выложу!

P.S. Хотел выложить всю прогу, но че-т не получается приаттачить файл, хотя и размер 18 кб. Могу на мыло кинуть, если надо!

Последний раз редактировалось ~ SaM ~, 14.11.2007 в 13:00.
Ответить с цитированием
  #6  
Старый 14.11.2007, 13:18
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
P.S. Хотел выложить всю прогу, но че-т не получается приаттачить файл, хотя и размер 18 кб. Могу на мыло кинуть, если надо!
Скорее всего это у тебя rar архив, а их аттачить запрещено. Сделай zip
Ответить с цитированием
  #7  
Старый 14.11.2007, 19:24
~ SaM ~ ~ SaM ~ вне форума
Начинающий
 
Регистрация: 05.01.2007
Адрес: Днепропетровск
Сообщения: 141
Репутация: 25
По умолчанию

Aristarh Dark! Ты прав!У меня именно rar! Я почему-то считал, что если в списке есть zip, то и рар тоже можно кидать! НО, я ошибся! А почему рары нельззя заливать?
Вложения
Тип файла: zip Шифр - Вижинера.zip (15.7 Кбайт, 270 просмотров)
Ответить с цитированием
  #8  
Старый 14.11.2007, 21:39
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,555
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от ~ SaM ~
Aristarh Dark! Ты прав!У меня именно rar! Я почему-то считал, что если в списке есть zip, то и рар тоже можно кидать! НО, я ошибся! А почему рары нельззя заливать?
Не то что нельзя, просто по некоторым причинам загрузка RAR архивов недоступна.
Ответить с цитированием
  #9  
Старый 15.11.2007, 11:02
uekmyfp uekmyfp вне форума
Прохожий
 
Регистрация: 12.11.2007
Сообщения: 6
Репутация: 10
По умолчанию

Спасибо Sam, все отлично! Но прога не работает у меня. Отправь мне по мылу, пли-и-из! Gulnaz312@mail.ru Надеюсь, что разберусь в коде, а если нет то снова придеться обратиться к тебе!!
Ответить с цитированием
  #10  
Старый 15.11.2007, 12:39
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
Восклицание

У меня всё работает.
Только у тебя в архиве нет второй формы About. Вот на неё он и ругается!
Я убрал всё ссылки на эту форму.
Вот исправленный архив:
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз

Последний раз редактировалось Yurk@, 16.08.2009 в 16:39.
Ответить с цитированием
  #11  
Старый 15.11.2007, 19:29
~ SaM ~ ~ SaM ~ вне форума
Начинающий
 
Регистрация: 05.01.2007
Адрес: Днепропетровск
Сообщения: 141
Репутация: 25
По умолчанию

to Yurk@
А смысл заливатьформу about???Там все равно написано: Лабара №6, выполнил студент .... и т.д. т.п.
Ответить с цитированием
  #12  
Старый 19.11.2007, 12:46
uekmyfp uekmyfp вне форума
Прохожий
 
Регистрация: 12.11.2007
Сообщения: 6
Репутация: 10
По умолчанию

Прога не работает! Я не могу ввести текст с клавы, почему? Поудаляла все ненужные кнопки, типа - Открыть, Сохранить! Вроде шифрует, но опять не правильно! Сдвиг на 1 букву не правильно! например если буква О с ключом П должна шифроваться как Э,а шиф-ся как Ю!
Ответить с цитированием
  #13  
Старый 19.11.2007, 14:09
Аватар для Winny
Winny Winny вне форума
Продвинутый
 
Регистрация: 26.05.2007
Адрес: Планета земля, Россия, Москва
Сообщения: 620
Репутация: 30
По умолчанию

To uekmyfp
Странно.... У меня всё работает. Посмотри, может у тебя у Memo значение ReadOnly в положении True, если да, то измени на False.
__________________

Ответить с цитированием
  #14  
Старый 19.11.2007, 14:56
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

У меня тоже всё работает!
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #15  
Старый 19.11.2007, 18:16
~ SaM ~ ~ SaM ~ вне форума
Начинающий
 
Регистрация: 05.01.2007
Адрес: Днепропетровск
Сообщения: 141
Репутация: 25
Счастье

to uekmyfp.

Проверяй почту!Я тебе отправил на почту весь исходник + exe со всеми комментариями.

P.S. На форум не выложил, т.к. 300 кб занимает. Кому надо - пишите!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:12.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025