Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
carmennn
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47
1

Делфи шифрования текста методом Тритемиуса

14.02.2013, 15:10. Просмотров 2469. Ответов 17
Метки нет (Все метки)

Люди, срочно помогите, нашел программу которая расшифровывается драные введение в тексбокс, мне нужно что бы она зашифровывал, уже целых 5 дней мучаюсь, расшифровка работает, и зашифровка нет. Проблема в том что на выходе выводит "ВВВВВВ" и т.д..

Вот зашифровка код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.btn1Click(Sender: TObject);
Var
  s,key, ssh:string;
  i,k,m,l:integer;
const
  alf='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
begin
  s:=Edt1.Text;
  key:='';
  ssh:='';
  while length(key)<length(s) do key:=key+Edt2.Text;
  for i:=1 to length(s) do
  begin
  l:=pos(s[i],alf)-1;
  k:=pos(key[i],alf)-1;
  if l-k<0 then m:=l-k+33+1 else m:=l-k+1;
  ssh:=ssh+alf[m];
  end;
  Edt3.Text:=ssh;
end;
Очень прошу помочь...
 Комментарий модератора 
Теги кода добавлены модератором. По правилам форума, код должен быть оформлен соответствующими тегами. Для оформления кода Delphi следует поместить этот код в теги: [DELPHI] - [/DELPHI]. Это можно сделать вручную или можно выделить код и на панели редактирования сообщения нажать кнопку: "DELPHI".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2013, 15:10
Ответы с готовыми решениями:

Шифрования текста методом замены
Мне надо, чтобы эта программа, шифровала текст, на русском или английском языке...

Составить программу, реализующую функции шифрования и расшифровывания текста по алгоритму шифрования RSA
1. Составить модуль программы вычисления простых чисел и вычислить сто простых...

Шифрования текста
Здравствуйте. Столкнулся с такой проблемой, что примеры шифрования, например...

Программа шифрования и дешифрования текста
Ребята заканчиваю учиться на программиста! До диплома осталось 3 дня помогите...

Программа шифрования и дешифрования файла методом простой замены
Очень нужно написать программу шифрования и дешифрования файла методом простой...

17
palva
3102 / 2233 / 451
Регистрация: 08.06.2007
Сообщений: 8,136
Записей в блоге: 4
14.02.2013, 23:43 2
Цитата Сообщение от carmennn Посмотреть сообщение
if l-k<0 then m:=l-k+33+1 else m:=l-k+1;
Замените на
Pascal
1
if l-k<0 then m:=l-k+33+1 else m:=l-k+1;
и будет зашифровка.
Только ваша программа обрабатывает исключительно большие русские буквы. Остальные символы она портит. То есть остальные символы после расшифровки дадут одну и ту же букву. Может быть, вы об этом явлении писали.
0
FIL
Модератор
3422 / 2556 / 728
Регистрация: 19.09.2012
Сообщений: 7,926
15.02.2013, 00:45 3
Цитата Сообщение от palva Посмотреть сообщение
Замените на...
И в чем тайный смысл замены строки на точно такую же?
1
palva
3102 / 2233 / 451
Регистрация: 08.06.2007
Сообщений: 8,136
Записей в блоге: 4
15.02.2013, 00:50 4
Ага. Не ту строчку из текста положил
Pascal
1
if l+k>=33 then m:=l+k-33+1 else m:=l+k+1;
1
carmennn
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47
17.02.2013, 02:43  [ТС] 5
Сделал как ты написал заработало.
Кстати можешь помочь ещё с регистром букв в алфавите, какие есть идеи?
0
palva
3102 / 2233 / 451
Регистрация: 08.06.2007
Сообщений: 8,136
Записей в блоге: 4
17.02.2013, 03:07 6
Сделать еще один массив букв. Если символ найден в первом массиве, то шифровать (расшифровывать) при помощи его. Если во втором массиве, то шифровать при помощи второго массива. Если не найден ни в том ни в другом, то оставлять символ без изменений. Поиск символов из ключа всегда осуществлять по первому массиву, поскольку ключ состоит из больших букв.
Delphi
1
2
3
const
  alf='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
  alfs='абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
Можно занести все шифруемые символы в один массив. Тогда надо менять константу 33 на 66. Но в любом случае если символ в массиве не найден, то его не менять, поскольку иначе мы потеряем информацию (не расшифруем правильно)
Первый способ хуже шифрует, зато второй способ делает текст слишком непохожим на обычный - большие буквы будут встречаться в середине слова. Это делает шифровку уязвимой для автоматизированного обнаружения спецслужбами в потоке почтовых отправлений.

Во втором способе можно использовать ключ из маленьких и больших букв. Это тоже улучшает надежность шифрования.
1
carmennn
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47
17.02.2013, 13:52  [ТС] 7
Я сделал по второму варианту, большие и маленькие буквы в один массив, сменил константу, ну пока что работает.
Только хотелось бы узнать как в этой же программе реализовать чтения строк из файла, и потом же сохранять. Есть идеи?
0
palva
3102 / 2233 / 451
Регистрация: 08.06.2007
Сообщений: 8,136
Записей в блоге: 4
17.02.2013, 14:07 8
В консольных приложениях обычно используют ReadLn/WriteLn. В оконных - потоки TFileStream.
Но при желании можно и наоборот.
1
carmennn
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47
18.02.2013, 01:30  [ТС] 9
Сохранения сделал вот так:

Delphi
1
2
3
4
5
6
7
8
9
Var outfile: TextFile;
begin
AssignFile(outfile, 'c:\outfile.txt');
Rewrite(outfile);
writeln(outfile, Edt1.Text);
writeln(outfile, Edt2.Text);
writeln(outfile, Edt3.Text);
CloseFile(outfile);
end;
Чтения питаюсь сделать так :
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
var
List:TStringList;
 
 
begin
 
List:=TStringList.Create;
List.LoadFromFile('c:\outfile.txt');
 
Edt1.Text:=List[0]
 
end;
end.
Но вот проблема не могу понять как List[0] сделать не перегруженным, то есть что бы било List[0], List[1], List[2].
0
palva
3102 / 2233 / 451
Регистрация: 08.06.2007
Сообщений: 8,136
Записей в блоге: 4
18.02.2013, 01:36 10
Здесь проще всего загрузить стрим в мемо (не показываемый на форме), а потом построчно разложить по эдитам.
Но если вы вывод делаете построчным, то и ввод логично делать так же.
1
carmennn
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47
18.02.2013, 01:41  [ТС] 11
Цитата Сообщение от carmennn Посмотреть сообщение
Сохранения сделал вот так:

Delphi
1
2
3
4
5
6
7
8
9
Var outfile: TextFile;
begin
AssignFile(outfile, 'c:\outfile.txt');
Rewrite(outfile);
writeln(outfile, Edt1.Text);
writeln(outfile, Edt2.Text);
writeln(outfile, Edt3.Text);
CloseFile(outfile);
end;
Чтения питаюсь сделать так :
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
var
List:TStringList;
 
 
begin
 
List:=TStringList.Create;
List.LoadFromFile('c:\outfile.txt');
 
Edt1.Text:=List[0]
 
end;
end.
Но вот проблема не могу понять как List[0] сделать не перегруженным, то есть что бы било List[0], List[1], List[2].
Понял почему не работало, я же не написал ( ; )
Delphi
1
2
3
Edt1.Text:=List[0];
Edt2.Text:=List[1];
Edt3.Text:=List[2];
Добавлено через 2 минуты
Я уже понял почему не хотело по строчно выводить.
Нужно било ; поставить.
Delphi
1
Edt1.Text:=List[0];
0
palva
3102 / 2233 / 451
Регистрация: 08.06.2007
Сообщений: 8,136
Записей в блоге: 4
18.02.2013, 02:07 12
Что-то я не то написал в предыдущем посте насчет мемо. Конечно же TStringList, что вы уже и сделали.
1
carmennn
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47
21.02.2013, 00:29  [ТС] 13
Ну а как быть если K задать с помощью линейного уравнения, например, k = 3t +1.
Или нелинейного уравнения, например, k = 8t2 +4 t +9.
0
carmennn
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47
25.02.2013, 18:37  [ТС] 14
Приветствую, не могу разобраться с РадиоКнопкой.

И так хочу сделать 2 радио button:
1.Руские буквы и массив длиной 66 букв.
2.Анг. Буквы и массив 52 буквы.

Но вот не могу понять как реализовать:
Delphi
1
if ABC.Checked then f:=alf; n:=52;
0
palva
3102 / 2233 / 451
Регистрация: 08.06.2007
Сообщений: 8,136
Записей в блоге: 4
25.02.2013, 18:40 15
Delphi
1
2
3
4
5
if ABC.Checked then
begin
    f:=alf;
    n:=52
end;
1
carmennn
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47
25.02.2013, 19:45  [ТС] 16
Я сделал вот так:

Delphi
1
2
if ABC.Checked=false then   f:=rus; n:=61;
  if ABC.Checked then         f:=alf; n:=52;
Добавлено через 3 минуты
Сейчас у меня в другом проблема, есть Лист бокс, и нужно задать ключ не словом как раньше а Линейным уравнением. Нужно заменить при выборе эту строку // k:=pos(key[i],f)-1; на вот такую k=3t+1.

То есть у нас шифрует по формуле k:=pos(key[i],f)-1; а нужно сделать что бы шифровало по вот такой формуле k=3t+1. Я как бы уже сделал но все ровно почему то нужно вводить ключ Key. Помоги...

Delphi
1
2
3
4
  case Shifr.ItemIndex of
  0: k:=pos(p,f)+1; //k=3t+1
  1: lbl3.Caption:='2';
  2: lbl3.Caption:='3'; //k:=pos(key[i],f)-1;
0
palva
3102 / 2233 / 451
Регистрация: 08.06.2007
Сообщений: 8,136
Записей в блоге: 4
25.02.2013, 20:58 17
Цитата Сообщение от carmennn Посмотреть сообщение
Я сделал вот так:
Вы неправильно сделали, об этом я написал в предыдущем посте.
Компьютер сделает вовсе не то, что вы имели в виду.

А второй вопрос я просто не понял.
0
carmennn
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47
25.02.2013, 21:32  [ТС] 18
Вот весь исходник.

Проверил работает.

Delphi
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
171
172
173
174
175
176
177
nit rrrrt1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    edt1: TEdit;
    edt2: TEdit;
    edt3: TEdit;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    btn5: TButton;
    ff: TLabel;
    lbl1: TLabel;
    lbl2: TLabel;
    lbl3: TLabel;
    btn6: TButton;
    ABC: TRadioButton;
    RUS: TRadioButton;
    Shifr: TComboBox;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure btn5Click(Sender: TObject);
    procedure edt1KeyPress(Sender: TObject; var Key: Char);
    procedure btn6Click(Sender: TObject);
    procedure edt2KeyPress(Sender: TObject; var Key: Char);
 
 
 
 
 
 
 
 //   procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
 
procedure TForm1.btn1Click(Sender: TObject);
Var
  s,key,ssh,f,p,r,d:string;
  i,k,m,l,n:integer;
const
    alf='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    rus='АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЫЬЭЮЯабвгдежзиклмнопрстуфхцчшщъыьэюя';
begin
 
  if ABC.Checked=false then   f:=rus; n:=61;
  if ABC.Checked then         f:=alf; n:=52;
  p:='3';
  r:='8';
  d:='4';
  s:=Edt1.Text;
  key:='';
  ssh:='';
  if Edt2.Text = EmptyStr then  Edt2.Text:='0';
  while length(key)<length(s) do key:=key+Edt2.Text;
  for i:=1 to length(s) do
  begin
  l:=pos(s[i],f)-1;
  case Shifr.ItemIndex of
  0: k:=pos(p,f)+1; //k=3t+1
  1: k:=pos(r,f)*2+pos(d,f)+9; //k=8t2+4t+9
  2: k:=pos(key[i],f)-1; //гасло
  end;
 // k:=pos(key[i],f)-1;
  lbl3.Caption:=IntToStr(k);
   if l-k<0 then m:=l-k+n+1 else m:=l-k+1;
  ssh:=ssh+f[m];
  end;
  Edt3.Text:=ssh;
end;
 
procedure TForm1.btn2Click(Sender: TObject);
Var
  s,key,ssh,f,p,r,d:string;
  i,k,m,l,n:integer;
const
    alf='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    rus='АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЫЬЭЮЯабвгдежзиклмнопрстуфхцчшщъыьэюя';
begin
 
  if ABC.Checked=false then   f:=rus; n:=61;
  if ABC.Checked then         f:=alf; n:=52;
  p:='3';
  r:='8';
  d:='4';
  s:=Edt1.Text;
  key:='';
  ssh:='';
  if Edt2.Text = EmptyStr then  Edt2.Text:='0';
  while length(key)<length(s) do key:=key+Edt2.Text;
  for i:=1 to length(s) do
  begin
  l:=pos(s[i],f)-1;
  case Shifr.ItemIndex of
  0: k:=pos(p,f)+1; //k=3t+1
  1: k:=pos(r,f)*2+pos(d,f)+9; //k=8t2+4t+9
  2: k:=pos(key[i],f)-1; //гасло
  end;
 // k:=pos(key[i],f)-1;
  lbl3.Caption:=IntToStr(k);
  if l+k>=n then m:=l+k-n+1 else m:=l+k+1;
  ssh:=ssh+f[m];
  end;
  Edt3.Text:=ssh;
end;
 
procedure TForm1.btn3Click(Sender: TObject);
Var outfile: TextFile;
begin
AssignFile(outfile, 'outfile.txt');
Rewrite(outfile);
writeln(outfile, Edt1.Text);
writeln(outfile, Edt2.Text);
writeln(outfile, Edt3.Text);
CloseFile(outfile);
lbl3.Caption:='Сохранено!';
 
end;
 
procedure TForm1.btn4Click(Sender: TObject);
var
List:TStringList;
begin
List:=TStringList.Create;
List.LoadFromFile('outfile.txt');
Edt1.Text:=List[0];
Edt2.Text:=List[1];
Edt3.Text:=List[2];
end;
procedure TForm1.btn5Click(Sender: TObject);
begin
Edt1.Text:='';
Edt2.Text:='';
Edt3.Text:='';
lbl3.Caption:='Крок змишення';
end;
 
 
procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char);
begin
 if not (Key  in ['A'..'z','А'..'я', 'Ё', 'ё', #8, #13]) then Key:=#0;
end;
 
procedure TForm1.btn6Click(Sender: TObject);
begin
Edt1.Text:=Edt3.Text;
Edt3.Text:=Edt1.Text;
end;
 
 
 
procedure TForm1.edt2KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key  in ['A'..'z','А'..'я', 'Ё', 'ё', #8, #13]) then Key:=#0;
end;
 
end.
0
25.02.2013, 21:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2013, 21:32

Создать приложение для шифрования/дешифрования файла ASCII методом
Необходимо создать приложение для шифрования/дешифрования файла ASCII методом в...

Шифр Тритемиуса
помогите создать программу на тему шифр тритемиуса.....так то я в общем понял...

Обработка текста в делфи
Требуется определить все слова в тексте и подсчитать их количество.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru