Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 17
1

Шифровка-дешифровка

21.04.2011, 22:59. Просмотров 4038. Ответов 11
Метки нет (Все метки)


Помогите пожалуйста !Необходимо создать программу,которая будет зашифровывать,и дешифровывать слово ,поставив каждой букве её номер в алфавите.если знаете-подскажите пожалуйста!например-А=1,Б=2,В=3,и т.д.
слово ''пример''за шифруется так-17181014618
,а соответственно введя 17181014618 я должен получить слово ''пример''!если можете-помогите пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2011, 22:59
Ответы с готовыми решениями:

Дешифровка по кодовому слову
Доброго времени суток читающему это сообщение. Перейду сразу к вопросу - нужно найти правильный...

Шифровка
Помогите пожалуйста! нужен программный код, ну иди хотя бы метод решение шифровки данных в виде...

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

шифровка данных
подскажите как шифровать\дешифровать данные (конкретно текст нужно), спрашивал на других форумах...

11
901 / 662 / 132
Регистрация: 01.03.2010
Сообщений: 1,243
22.04.2011, 00:50 2
Dima170792,
Думаю, что при шифровании необходимо формировать ключ, в котором сохраняется последовательность, показывающая сколько знаков отводится очередной букве.
Возьмем слово "пример". Его код 17181014618
п - 17 (2 знака)
р - 18 (2)
и - 10 (2)
м - 14 (2)
е - 6 (1)
р - 18 (2)

ключ будет 222212.

При расшифровке вводится этот ключ и по нему последовательно считывается нужное кол-во цифр, которые затем превращаются в буквы.

Мне кажется, что по другому нельзя. Как программа поймет, что ей считывать? 1 - это а или 17 - это п (в твоем примере)?

Правда, ключ может получиться очень длинным

Есть еще вариант, сделать код для всех знаков 2-х значным. Тогда ключ не понадобиться.
Ставь просто нуль перед однозначным числом. 171810140618

Но это уже будет слабое шифрование. Легко взломать.
0
S9
Волшебник
654 / 257 / 88
Регистрация: 18.12.2010
Сообщений: 545
22.04.2011, 00:58 3
Шифрует русские буквы в верхнем регистре и пробел. Правда код громоздкий, но как сделать по другому я не знаю...
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
Function CryptMessg(Messg:String):String;
Var
i:SmallInt;
Temp:String;
Begin
For i:=1 To Length(Messg) Do
Begin
  Case Messg[i] Of
    'А':Temp:=Temp+'01';
    'Б':Temp:=Temp+'02';
    'В':Temp:=Temp+'03';
    'Г':Temp:=Temp+'04';
    'Д':Temp:=Temp+'05';
    'Е':Temp:=Temp+'06';
    'Ё':Temp:=Temp+'07';
    'Ж':Temp:=Temp+'08';
    'З':Temp:=Temp+'09';
    'И':Temp:=Temp+'10';
    'Й':Temp:=Temp+'11';
    'К':Temp:=Temp+'12';
    'Л':Temp:=Temp+'13';
    'М':Temp:=Temp+'14';
    'Н':Temp:=Temp+'15';
    'О':Temp:=Temp+'16';
    'П':Temp:=Temp+'17';
    'Р':Temp:=Temp+'18';
    'С':Temp:=Temp+'19';
    'Т':Temp:=Temp+'20';
    'У':Temp:=Temp+'21';
    'Ф':Temp:=Temp+'22';
    'Х':Temp:=Temp+'23';
    'Ц':Temp:=Temp+'24';
    'Ч':Temp:=Temp+'25';
    'Ш':Temp:=Temp+'26';
    'Щ':Temp:=Temp+'27';
    'Ъ':Temp:=Temp+'28';
    'Ы':Temp:=Temp+'29';
    'Ь':Temp:=Temp+'30';
    'Э':Temp:=Temp+'31';
    'Ю':Temp:=Temp+'32';
    'Я':Temp:=Temp+'33';
    ' ':Temp:=Temp+'34';
  End;
End;
Result:=Temp;
End;
 
Function DeCryptMessg(Messg:String):String;
Var
i,j:SmallInt;
Temp:String;
Begin
For i:=1 To Length(Messg) Do
  Begin
  If i Mod 2 = 1 Then Begin
If (Messg[i] = '0') And (Messg[i+1] = '1') Then
  Temp:=Temp+'А';
If (Messg[i] = '0') And (Messg[i+1] = '2') Then
  Temp:=Temp+'Б';
If (Messg[i] = '0') And (Messg[i+1] = '3') Then
  Temp:=Temp+'В';
If (Messg[i] = '0') And (Messg[i+1] = '4') Then
  Temp:=Temp+'Г';
If (Messg[i] = '0') And (Messg[i+1] = '5') Then
  Temp:=Temp+'Д';
If (Messg[i] = '0') And (Messg[i+1] = '6') Then
  Temp:=Temp+'Е';
If (Messg[i] = '0') And (Messg[i+1] = '7') Then
  Temp:=Temp+'Ё';
If (Messg[i] = '0') And (Messg[i+1] = '8') Then
  Temp:=Temp+'Ж';
If (Messg[i] = '0') And (Messg[i+1] = '9') Then
  Temp:=Temp+'З';
If (Messg[i] = '1') And (Messg[i+1] = '0') Then
  Temp:=Temp+'И';
If (Messg[i] = '1') And (Messg[i+1] = '1') Then
  Temp:=Temp+'Й';
If (Messg[i] = '1') And (Messg[i+1] = '2') Then
  Temp:=Temp+'К';
If (Messg[i] = '1') And (Messg[i+1] = '3') Then
  Temp:=Temp+'Л';
If (Messg[i] = '1') And (Messg[i+1] = '4') Then
  Temp:=Temp+'М';
If (Messg[i] = '1') And (Messg[i+1] = '5') Then
  Temp:=Temp+'Н';
If (Messg[i] = '1') And (Messg[i+1] = '6') Then
  Temp:=Temp+'О';
If (Messg[i] = '1') And (Messg[i+1] = '7') Then
  Temp:=Temp+'П';
If (Messg[i] = '1') And (Messg[i+1] = '8') Then
  Temp:=Temp+'Р';
If (Messg[i] = '1') And (Messg[i+1] = '9') Then
  Temp:=Temp+'С';
If (Messg[i] = '2') And (Messg[i+1] = '0') Then
  Temp:=Temp+'Т';
If (Messg[i] = '2') And (Messg[i+1] = '1') Then
  Temp:=Temp+'У';
If (Messg[i] = '2') And (Messg[i+1] = '2') Then
  Temp:=Temp+'Ф';
If (Messg[i] = '2') And (Messg[i+1] = '3') Then
  Temp:=Temp+'Х';
If (Messg[i] = '2') And (Messg[i+1] = '4') Then
  Temp:=Temp+'Ц';
If (Messg[i] = '2') And (Messg[i+1] = '5') Then
  Temp:=Temp+'Ч';
If (Messg[i] = '2') And (Messg[i+1] = '6') Then
  Temp:=Temp+'Ш';
If (Messg[i] = '2') And (Messg[i+1] = '7') Then
  Temp:=Temp+'Щ';
If (Messg[i] = '2') And (Messg[i+1] = '8') Then
  Temp:=Temp+'Ъ';
If (Messg[i] = '2') And (Messg[i+1] = '9') Then
  Temp:=Temp+'Ы';
If (Messg[i] = '3') And (Messg[i+1] = '0') Then
  Temp:=Temp+'Ь';
If (Messg[i] = '3') And (Messg[i+1] = '1') Then
  Temp:=Temp+'Э';
If (Messg[i] = '3') And (Messg[i+1] = '2') Then
  Temp:=Temp+'Ю';
If (Messg[i] = '3') And (Messg[i+1] = '3') Then
  Temp:=Temp+'Я';
If (Messg[i] = '3') And (Messg[i+1] = '4') Then
  Temp:=Temp+' ';
  End;
End;
Result:=Temp;
End;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
If RadioButton1.Checked Then
Edit1.Text:=CryptMessg(Edit1.Text)
Else
Edit1.Text:=DeCryptMessg(Edit1.Text);
end;
Думаю лучше было-бы использовать вместо цифр всякие символы (типа %,*,> и т.п.);
1
Вложения
Тип файла: rar Crypt.rar (167.1 Кб, 103 просмотров)
901 / 662 / 132
Регистрация: 01.03.2010
Сообщений: 1,243
22.04.2011, 01:39 4
Цитата Сообщение от S9 Посмотреть сообщение
Правда код громоздкий, но как сделать по другому я не знаю...
Для кодировки текста из больших букв можно так
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
Function CryptMessg(Messg:String):String;
Var
i,OrdW:SmallInt;
Temp:String;
Begin
For i:=1 To Length(Messg) Do
Begin
 OrdW:= Ord(Messg[i]);
 
 if  (OrdW>191) and  (OrdW <225) // пропускаем только большие буквы
 then OrdW:=OrdW-191;// тогда A=192-191=1, Б=193-191=2 и т.д
 
 if OrdW=32 then OrdW:=34;// для пробела назначим код 34
 
 if OrdW<10 then Temp:=Temp+'0'+IntToStr(OrdW)
 else Temp:=Temp+IntToStr(OrdW)
end;
 Result:=Temp;
End;
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=CryptMessg(Edit1.Text);
end;
Для декодирования код чуть больше будет, но с применением этого принципа.

Правда код на слово "пример" другой чуть будет, т.к. не учитывается буква Ё.
Поэтому п будет 16 а не 17 и т.д.
Но можно учесть и ее.

Этот пример является вторым вариантом, о котором я писал выше
2
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 17
22.04.2011, 23:15  [ТС] 5
В принципе подходит код S9только один вопрос-есть ли функция переводящая большие буквы в маленькие?
0
S9
Волшебник
654 / 257 / 88
Регистрация: 18.12.2010
Сообщений: 545
22.04.2011, 23:31 6
Цитата Сообщение от Dima170792 Посмотреть сообщение
есть ли функция переводящая большие буквы в маленькие?
Есть AnsiLowerCase. Но думаю можно было бы прям в тексте программы вместо больших букв писать маленькие, или те и другие
0
0 / 0 / 1
Регистрация: 28.12.2011
Сообщений: 10
23.08.2012, 20:08 7
Вот хороший алгоритм шифрования:
http://articles.org.ru/docum/rocki.php
0
0 / 0 / 0
Регистрация: 11.11.2015
Сообщений: 6
11.11.2015, 15:07 8
S9, спасибо за код, но я не могу понять зачем в функции декрипта условие If i Mod 2 = 1 Then. Объясните пожалуйста
0
S9
Волшебник
654 / 257 / 88
Регистрация: 18.12.2010
Сообщений: 545
13.11.2015, 21:26 9
marijuana777, судя по всему это условие, что все буквы расшифруются. Скорее всего для простоты я по нубски каждую букву кодировал строго двумя цифрами, и поэтому для корректной дешифровки требуется чётное количество цифр (количество спрятанных букв будет равно количеству цифр деленному на два).
Вот наверное по этому там и такое условие.

P.S. В любом случае, сложно что-либо вспомнить насчёт кода, который писал 5 лет назад, на языке, который уже несколько лет не используешь
1
2508 / 1129 / 582
Регистрация: 07.06.2014
Сообщений: 3,281
13.11.2015, 21:59 10
Цитата Сообщение от marijuana777 Посмотреть сообщение
о я не могу понять зачем в функции декрипта условие If i Mod 2 = 1
декодируем только для нечётных значений i
т.е. цикл можно написать так:
Delphi
1
2
3
4
5
i:=1;
while i<Length(Messg) do begin
   тут код декодирования
   inc(i,2);
end;
но вообще, так не делают! Это ужас и кошмар.
Достаточно завести строчку с буквами
Delphi
1
Rus :=  'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
и использовать для кодирования/декодирования её.

если нужно, могу показать, как это записать.
1
0 / 0 / 0
Регистрация: 11.11.2015
Сообщений: 6
15.11.2015, 19:41 11
Буду признателен за код или пример.
0
2508 / 1129 / 582
Регистрация: 07.06.2014
Сообщений: 3,281
16.11.2015, 08:23 12
Цитата Сообщение от marijuana777 Посмотреть сообщение
Буду признателен за код или пример.
легко.
вот функция для кодирования строки:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
const
  RusLetters4Code = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ';
 
Function CryptMessg(Messg:String):String;
Var
  i,t:integer;
Begin
   Result := '';
   For i:=1 To Length(Messg) Do Begin
      t := Pos(Messg[i], RusLetters4Code);
      if t>0 then Result := Result + Format('%.2d', [t]);
   End;
End;
Добавлено через 4 минуты
код декодирования написать?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2015, 08:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Шифровка ввода
Скажите, как сделать зашифрованный ввод, то есть например я ввожу 1111 в едит, а оно шифровалось,...

Шифровка ресурсных файлов
Как зашифровать или спрятать в программу ресурсные файлы(у меня это 69 папок и 552 файла объемом...

Шифровка и расшифровка числа
Доброго дня, сделал шифровку числа, а теперь нужно его расшифровать. Как это сделать? var ...

Шифровка/расшифровка текста
Дана такая задача: Чтобы зашифровать текст, записанный с помощью русских букв и знаков, его...


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

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

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