Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 58
1

Не работает дешифрование текста

16.04.2015, 09:05. Показов 552. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа правильно шифрует текст. Но когда стоит задача дешифровать текст, то программа не выводит дешифрованный текст. Где ошибка?
Main.cpp
C++
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
#include "playfair.h"
using namespace std;
int main(int argc, char* argv[])
{
    int number = 0;
    keyWord();
    initializeMatrix();
    while (1)                   
    {
        if (number == 0)
        {
            cout << "\nInput 1 for encrypting, input 2 for decrypting, input 3 for exit\nYour choose: ";
            cin.clear();
            cin.sync();
            cin >> number;
        }
        if(cin)
        {
            if (number == 1)
            {
                cout << "Write phrase for encrypting: ";
                pre_encrypting();
                encrypting();
                number = 0;
            }
            else if (number == 2)
            {
                cout << "Write phrase for decrypting: ";
                pre_decrypting();
                decrypting();
                number = 0;
            }
            else if (number == 3)
            {
                return 0;
            }
            else
            {
                number = 0;
            }
        }
        else
        {
            cout << "Wrong data type, input again!" << endl;
            number = 0;
        }
    }
}
playfair.cpp
C++
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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
#include "playfair.h"
using namespace std;
/// Глобальные переменные
char wrongSymbols[] = "!@#$%^&*()_+№;:?_+~`{[}];:'|/<,>.1234567890"; /// Недопустимые символы
char G_processedText[SIZE]; /// Массив символов который передает ключевую фразу в матрицу
char matrix[SIZE_2][SIZE_2];/// Матрица символов которая является шифр таблицей
char bigramm_text[SIZE];    /// Массив символов который содержит фразу которая должна зашифроваться
string ResText;             /// Строка в которую записывается зашифрованная фраза
//---------------------------------------------------------------------------
void keyWord()  
{
    char writedText[SIZE] = {0}, processedText[SIZE] = {0};
    char i, j, k = 0;
    cout << "Input key: ";
    cin.clear();
    cin.sync();
    cin.getline(writedText, SIZE);
    system("cls");
    for(i = 0; i < strlen(writedText); i++)
    {
        j = writedText[i];
        if(!strchr(wrongSymbols, j))
        {
            j = tolower(j);
            if(!strchr(processedText, j) && j != ' ')
            {
                processedText[k] = j;
                k += 1;
            }
        }
    }
    strcpy(G_processedText, processedText);
    cout << "Your Key: " << processedText << endl;
}
//---------------------------------------------------------------------------
void initializeMatrix()
{
    ///cout << "Matrix: " << G_processedText << endl;
    char saveSymbols[SIZE] = "";
    char alphabet[] = "abcdefghiklmnopqrstuvwxyz";
    char j, p, jo;
    int i, k, io, ko;
    k = 0;
    ko =0;
    ///Объединение ключа и алфавита
    strcat(G_processedText, alphabet);
    cout << "\nMatrix: " << endl;
    for (i = 0; i < strlen(G_processedText); i++)
    {
        p = G_processedText[i];
        if(!strchr(saveSymbols, p))
        {
            saveSymbols[k] = p;
            k += 1;
        }
    }
    for(io = 0; io < SIZE_2; io++)
    {
 
        for(jo = 0; jo < SIZE_2; jo++)
        {
            matrix[io][jo] = saveSymbols[jo+ko];
            cout << matrix[io][jo] << " ";
        }
        ko += 5;
        cout << endl;
    }
    ///cout << matrix << endl;
}
//---------------------------------------------------------------------------
void pre_encrypting()
{
    char writedText[SIZE] = {0}, processedText[SIZE] = {0};
    char i, j, k = 0;
    int repeat;
    cin.clear();
    cin.sync();
    cin.getline(writedText, SIZE);
    for(i = 0; i < strlen(writedText); i++)
    {
        j = writedText[i];
        if(!strchr(wrongSymbols, j))
        {
            j = tolower(j);
            if(j != ' ')
            {
                processedText[k] = j;
                k += 1;
            }
        }
    }
    /// Если биграмма имеет одинаковые символы(последний заменить на x)
    for(repeat = 0; repeat < strlen(processedText); repeat += 2)
    {
        char a, b;
        a = processedText[repeat];
        b = processedText[repeat+1];
        ///cout << a << " : " << b << endl;
        if(a == b)
            processedText[repeat+1] = 'x';
    }
    /// Добавление x в конец строки если нет пары для последней биграммы
    if(strlen(processedText) % 2 != 0)
       processedText[strlen(processedText)] = 'x';
    strcpy(bigramm_text, processedText);
    // Вывод зашифровываемой фразы
    cout << "Your phrase: " << processedText << endl;
}
//---------------------------------------------------------------------------
void encrypting()
{
    // шаг кодировки биграммы
    int step = 0;
    // координаты элемента первого символа биграммы(2у мерный массив)
    int ind_x1 = 0;
    int ind_y1 = 0;
    // координаты элемента второго символа биграммы(2у мерный массив)
    int ind_x2 = 0;
    int ind_y2 = 0;
    // переменные для циклов for
    int i, j;
 
    while(step < strlen(bigramm_text))
    {
        /// Координаты совпадений с таблицей
        for (int i=0; i<5; i++)
        {
            for (int j=0; j<5; j++)
            {
                if (bigramm_text[step] == matrix[i][j])
                {
                    ind_x1 = i;
                    ind_y1 = j;
                    ///cout << bigramm_text[step] << " " << ind_x1 << " " << ind_y1 << endl;
                }
 
                if (bigramm_text[step+1] == matrix[i][j])
                {
                    ind_x2 = i;
                    ind_y2 = j;
                    ///cout << bigramm_text[step+1] << " " << ind_x2 << " " << ind_y2 << endl;
                }
            }
        }
        /// Если буквы находятся в одной строке
        if (ind_x1 == ind_x2)
        {
            if (ind_y1 == 4)
            {
                ResText += matrix[ind_x1][0];
                ResText += matrix[ind_x2][ind_y2+1];
            }
            else if (ind_y2 == 4)
            {
                ResText += matrix[ind_x1][ind_y1+1];
                ResText += matrix[ind_x2][0];
            }
            else
            {
                ResText += matrix[ind_x1][ind_y1+1];
                ResText += matrix[ind_x2][ind_y2+1];
            }
        }
 
        /// Если буквы находятся в одном столбце
        if (ind_y1 == ind_y2)
        {
            if (ind_x1 == 4)
            {
                ResText += matrix[0][ind_y1];
                ResText += matrix[ind_x2+1][ind_y2];
            }
            else if (ind_x2 == 4)
            {
                ResText += matrix[ind_x1+1][ind_y1];
                ResText += matrix[0][ind_y2];
            }
            else
            {
                ResText += matrix[ind_x1+1][ind_y1];
                ResText += matrix[ind_x2+1][ind_y2];
            }
        }
 
        /// Если буквы находятся в разных строках и разных столбцах
        if ((ind_x1 != ind_x2) && (ind_y1 != ind_y2))
        {
            ResText += matrix[ind_x1][ind_y2];
            ResText += matrix[ind_x2][ind_y1];
        }
        step += 2;
    }
    cout << "Encrypted: " << ResText << endl;
    ResText = "";
}
//---------------------------------------------------------------------------
void pre_decrypting()
{
    char writedText[SIZE] = {0}, processedText[SIZE] = {0};
    char i, j, k;
    int repeat;
    cin.clear();
    cin.sync();
    cin.getline(writedText, SIZE);
    for(i = 0; i < strlen(writedText); i++)
    {
        j = writedText[i];
        if(!strchr(wrongSymbols, j))
        {
            j = tolower(j);
            if(j != ' ')
            {
                processedText[k] = j;
                k += 1;
            }
        }
    }
    /// Если биграмма имеет одинаковые символы(последний заменить на x)
    /*for(repeat = 0; repeat < strlen(processedText); repeat += 2)
    {
        char a, b;
        a = processedText[repeat];
        b = processedText[repeat+1];
        ///cout << a << " : " << b << endl;
        if(a == b)
            processedText[repeat+1] = 'x';
    }*/
    /// Добавление x в конец строки если нет пары для последней биграммы
    if(strlen(processedText) % 2 != 0)
       processedText[strlen(processedText)] = 'x';
    strcpy(bigramm_text, processedText);
    // Вывод шифрованой фразы
    cout << "Your encrypted phrase: " << processedText << endl;
}
//---------------------------------------------------------------------------
void decrypting()
{
 
    // шаг раскодировки биграммы
    int step = 0;
    // координаты элемента первого символа биграммы(2у мерный массив)
    int ind_x1 = 0;
    int ind_y1 = 0;
    // координаты элемента второго символа биграммы(2у мерный массив)
    int ind_x2 = 0;
    int ind_y2 = 0;
    // переменные для циклов for
    int i, j;
 
    while(step < strlen(bigramm_text))
    {
        /// Координаты совпадений с таблицей
        for (int i=0; i<5; i++)
        {
            for (int j=0; j<5; j++)
            {
                if (bigramm_text[step] == matrix[i][j])
                {
                    ind_x1 = i;
                    ind_y1 = j;
                    ///cout << bigramm_text[step] << " " << ind_x1 << " " << ind_y1 << endl;
                }
 
                if (bigramm_text[step+1] == matrix[i][j])
                {
                    ind_x2 = i;
                    ind_y2 = j;
                    ///cout << bigramm_text[step+1] << " " << ind_x2 << " " << ind_y2 << endl;
                }
            }
        }
        /// Если буквы находятся в одной строке
        if (ind_x1 == ind_x2)
        {
            if (ind_y1 == 0)
            {
                ResText += matrix[ind_x1][4];
                ResText += matrix[ind_x2][ind_y2-1];
            }
            else if (ind_y2 == 0)
            {
                ResText += matrix[ind_x1][ind_y1-1];
                ResText += matrix[ind_x2][4];
            }
            else
            {
                ResText += matrix[ind_x1][ind_y1-1];
                ResText += matrix[ind_x2][ind_y2-1];
            }
        }
 
        /// Если буквы находятся в одном столбце
        if (ind_y1 == ind_y2)
        {
            if (ind_x1 == 0)
            {
                ResText += matrix[4][ind_y1];
                ResText += matrix[ind_x2-1][ind_y2];
            }
            else if (ind_x2 == 0)
            {
                ResText += matrix[ind_x1-1][ind_y1];
                ResText += matrix[4][ind_y2];
            }
            else
            {
                ResText += matrix[ind_x1-1][ind_y1];
                ResText += matrix[ind_x2-1][ind_y2];
            }
        }
 
        /// Если буквы находятся в разных строках и разных столбцах
        if ((ind_x1 != ind_x2) && (ind_y1 != ind_y2))
        {
            ResText += matrix[ind_x1][ind_y2];
            ResText += matrix[ind_x2][ind_y1];
        }
        step += 2;
    }
    /// Удаление символа x если он является последним
    if(ResText[ResText.length() - 1] == 'x')
        ResText.erase(ResText.end() - 1);
    cout << "Decrypted: " << ResText << endl;
    ResText = "";
}
playfair.h
C++
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
#ifndef playfair
#define playfair
#include <iostream>
#define SIZE 250
#define SIZE_2 5
#include <string>
#include <locale>
#include <cstdlib>
#include <string.h>
#include <_str.h>
#include <typeinfo>    
 
/// Глобальные переменные
extern char wrongSymbols[]; /// Недопустимые символы
extern char G_processedText[SIZE]; /// Массив символов который передает ключевую фразу в матрицу
extern char matrix[SIZE_2][SIZE_2];/// Матрица символов которая является шифр таблицей
extern char bigramm_text[SIZE]; /// Массив символов который содержит фразу которая должна зашифроваться
extern std::string ResText;             /// Строка в которую записывается зашифрованная фраза
/// Прототипы функций
void keyWord();         /// Образует ключ шифратора(удаляет из введенной фразы пробелы, цифры, знаки, заглавные буквы)
void initializeMatrix();/// Вшивает в матрицу ключ шифратора
void pre_encrypting();  /// Убирает из зашифровываемой фразы пробелы, цифры, знаки, заглавные буквы
void pre_decrypting();  /// Ввод расшифровываемой фразы(удаляется все кроме строчных букв)
void encrypting();      /// Шифрует преобразованную фразу
void decrypting();      /// Расшифровывает зашифрованную фразу
#endif
Миниатюры
Не работает дешифрование текста  
Вложения
Тип файла: rar Playfair.rar (176.1 Кб, 3 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.04.2015, 09:05
Ответы с готовыми решениями:

Шифрование и дешифрование текста
Народ вот програма для шифрования текста мне нужно переделать так штоб били подпрограми: 1) на...

Шифрование/дешифрование текста: шифр Цезаря
8. Написать программу, которая позволяет зашифровывать и расшифровывать с помощью «шифра Цезаря»...

Шифрование/дешифрование текста: шифр Цезаря
Задали дома сделать шифр Цезаря , проблема в том ,что объяснили лишь ,что делать через char и все....

Шифрование и дешифрование текста методом шифрующих таблиц
Помогите написать программу. Выполнить шифрование и дешифрование текста методом шифрующих...

0
16.04.2015, 09:05
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.04.2015, 09:05
Помогаю со студенческими работами здесь

Составить программу, выполняющую шифрование и дешифрование текста
Здравствуйте. Есть задание Используя алгоритм гаммирования с конгруэнтным датчиком ПСЧ, составить...

Выполнить шифрование и дешифрование текста, выбрав любой способ шифрования
Собственно надо - &quot;Выполнить шифрование и дешифрование текста, выбрав любой способ шифрования&quot;. Я...

Выполнить шифрование и дешифрование текста с использованием ассоциативных магических квадратов
Помогите сделать, очень надо. Не понимаю как. Выполнить шифрование и дешифрование текста с...

Дешифрование текста
Помогите пожалуйста! Текст шифруется следующим способом: каждое предложение разбивается на группы...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru