С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/19: Рейтинг темы: голосов - 19, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47

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

14.02.2013, 15:10. Показов 4125. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2013, 15:10
Ответы с готовыми решениями:

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

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

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

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

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

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
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,925
Записей в блоге: 5
18.02.2013, 01:36
Здесь проще всего загрузить стрим в мемо (не показываемый на форме), а потом построчно разложить по эдитам.
Но если вы вывод делаете построчным, то и ввод логично делать так же.
1
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47
18.02.2013, 01:41  [ТС]
Цитата Сообщение от 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
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,925
Записей в блоге: 5
18.02.2013, 02:07
Что-то я не то написал в предыдущем посте насчет мемо. Конечно же TStringList, что вы уже и сделали.
1
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47
21.02.2013, 00:29  [ТС]
Ну а как быть если K задать с помощью линейного уравнения, например, k = 3t +1.
Или нелинейного уравнения, например, k = 8t2 +4 t +9.
0
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 47
25.02.2013, 18:37  [ТС]
Приветствую, не могу разобраться с РадиоКнопкой.

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

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

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
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,925
Записей в блоге: 5
25.02.2013, 20:58
Цитата Сообщение от carmennn Посмотреть сообщение
Я сделал вот так:
Вы неправильно сделали, об этом я написал в предыдущем посте.
Компьютер сделает вовсе не то, что вы имели в виду.

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2013, 21:32
Помогаю со студенческими работами здесь

Создать программу для шифрования текста методом перестановки в Excel
Помогите пожалуйста, нужно создать в excel vba программу для шифрования текста методом перестановки. Должно появиться окно, где можно будет...

Шифрования текста
Зашифровать и расшифровать текст по следующему правилу : внутри каждой четвёрки символов делать перестановку: 1234-4213

Шифрования текста
Кто может дать исходник програми для шифрования текста

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

Алгоритм шифрования методом Гронсфельда
И снова доброго времени суток, уважаемые форумчане! Подскажите, как сделать, чтобы при шифровании каждый следующий символ шифровался...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru