Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разложение на простые множители* Всем привет. Поможете с задачой только использвав <iostream> Задано натуральное число >= 2 . Разложить его на простые множители Input Output 15 3*5 120 2*2*2*3*5 17 17 242 ... https://www.cyberforum.ru/ cpp-beginners/ thread2493600.html C++ Определить есть ли в списке два противоположных числа
Дан список чисел. Определите, есть ли в нем два противоположных(то есть дающих в сумме 0) числа. Если такие числа есть в массиве, выведите их индексы в порядке возрастания. Если таких чисел в массиве...
C++ Задержка (Остановка) только одной функции в программе https://www.cyberforum.ru/ cpp-beginners/ thread2493559.html
В общем, осваиваю я с++, для чего делаю разнообразные элементарные программы. Создавая очередную консольную программу, мне понадобилось вывести на экран таймер, который будет отсчитывать некоторое...
C++ Запись констант в шестнадцатеричной системе Сейчас изучаю библиотеки связанные с блютуз и вот такая интересная штука почти везде используется 16-теричная система для записи в переменную ,зачем и почему? вот примеры uint8_t lap = { 0x33,... https://www.cyberforum.ru/ cpp-beginners/ thread2493552.html
C++ Проблема с g++ x32
В общих чертах есть большая программа (текстовый редактор) и при компиляции для windows x32 через mingw выходит ошибка cc1plus.exe: out of memory allocating 65536 bytes что она значит я знаю ,но как...
C++ Ошибка . undefined reference to https://www.cyberforum.ru/ cpp-beginners/ thread2493487.html
При компиляции вылетает указанная ниже ошибка. В чем может быть проблем? Linux Часть кода #include <pulse/simple.h> #include <pulse/error.h> static const pa_sample_spec ss = { .format =...
C++ Приравнивание указателя одного типа к указателю другого Есть структура : struct hci_inquiry_req { uint16_t dev_id; uint16_t flags; uint8_t lap; uint8_t length; uint8_t num_rsp; }; https://www.cyberforum.ru/ cpp-beginners/ thread2493402.html Сортировка по алфавиту C++
Имееться файл с данными о читателях: Savchuk:Lida:Ivanovna:1956:56953247:4:0:1:500: Marchenko:Dmitry:Olegovich:1999:54446844:3:1:2:500: и тд нужно ВЫВЕСТИ всех в алфавитном порядке но программа...
C++ Не могу заставить работать отладку Вылезает такая ошибка, пробовал переключать gdb и cdb, никак не идет https://www.cyberforum.ru/ cpp-beginners/ thread2493364.html C++ Рекурсивная функция перевода числа в двоичную, восьмеричную и шестнадцатеричную системы https://www.cyberforum.ru/ cpp-beginners/ thread2493357.html
Пользователь вводит число в десятичной системе счисления. Перевести его в двоичную, восьмеричную и шестнадцатеричную системы. (не забываем заменять числа на ABCDEF в 16-ричной системе) Сделать с...
C++ Найти указанный реквизит во всех документах содержащихся в заданной папке
имеется папка с текстовыми и табличными документами, в каждом документе имеется идентефицирующий реквизит(состоит из чего угодно), необходимо найти вышеуказанный реквизит во всех документах, вывести...
C++ Выводит ошибку MBS6006 "CL.exe" exited with code 2. Как исправить эту ошибку? https://www.cyberforum.ru/ cpp-beginners/ thread2493235.html
Иногда возникает эта ошибка и не понимаю, мол откуда она. Погуглил - ничего дельного. Подскажите, как это решить. В онлайн компиляторе все исправно. Работаю в Visual Studio 2019. #pragma once...
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 160
0

Программа шифрования слова периодически не работает - C++ - Ответ 13786976

23.08.2019, 17:32. Показов 810. Ответов 6
Метки (Все метки)

Используется шифр Чейза:

- Таблица (ключ)
Q W E R T Y U I O P
A S D F G H J K L Z
X C V B N M [ ] ( )

-Слово раскладывается на две строчки из координат этих букв

-Нижняя строчка умножается на множитель; если цифр становится больше, к верхней спереди дописываются единицы

-Из полученных новых координат формируется новое слово


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

Ключ берётся из файла key.txt, слово - sI.txt.

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
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    int i,j,cnt=0,z=0,x=0,y=1,lE=0,mt=1,xC=0,xCe=0;
    int c1[1000],c2s[1000],c2[1000];
    char key[30][30],msg[1000],cdd[1000],M;
 
    ifstream fin;
    ofstream fout;
 
    fin.open("key.txt");
 
    for(i=0;i<3;i++)
        for(j=0;j<10;j++)
            fin>>key[i][j];
 
    fin.close();
 
    for(i=0;i<3;i++)                                                                                //Считывание ключа
        {
            for(j=0;j<10;j++)
            {
                if(cnt==10)
                    {cout<<endl; cnt=0;}
 
                cout<<key[i][j];
 
                cnt++;
            }
        }
 
    cnt=0,
 
    cout<<endl<<endl;
 
    memset(msg, 0, sizeof(msg));
 
    fin.open("sI.txt");
 
    for(i=0;;i++)                                                                                   //Считывание слова
    {
        fin>>msg[i];
 
        if(msg[i]=='\0')
        {
            break;
        }
    }
 
    fin.close();
 
    lE=strlen(msg);
 
    for(z=0;z<lE;z++)
        cout<<msg[z];
 
    cout<<endl<<endl;
 
    for(z=0;z<lE;z++)
        for(i=0;i<3;i++)
            for(j=0;j<10;j++)                                                              //Разложение слова на ряды
            {
                if(msg[z]==key[i][j])
                {
                    if(i==9 || j==9)
                    {
                        if(i==9)
                        {
                            c1[x]=0;
 
                            c2s[x]=j+1;
                        }
                        else
                        {
                            c1[x]=i+1;
 
                            c2s[x]=0;
                        }
                    }
                    else
                    {
                        c1[x]=i+1;
 
                        c2s[x]=j+1;
                    }
 
                    x++;
                }
            }
 
    for(z=0;z<lE;z++)
        cout<<c1[z];
 
    cout<<endl;
 
    for(z=0;z<lE;z++)
        cout<<c2s[z];
 
    cout<<endl<<endl<<"S - Shifr; D - Dekodirovaniye: ";
 
    cin>>M;
 
    if(M=='S')
    {cout<<endl<<endl<<"Mnozhitel: ";                                                      //ШИФРОВАНИЕ
 
    cin>>mt;
 
    for(i=x-1;i>=0;i--)
    {
        xC+=y*c2s[i];
 
        y*=10;
    }
 
    y=10;
 
    xCe=xC*mt;
 
    while(xCe>0)                                                                                    //Кол-во цифр
    {
        xCe=xCe-xCe%y;
 
        y*=10;
 
        cnt++;
    }
 
    xCe=xC*mt;
 
    y=10;
 
    for(i=cnt-1;i>-1;i--)                                                                               //Новая вторая строка
    {
        c2[i]=xCe%10;
 
        xCe/=10;
    }
 
    if(cnt!=x)                                                                                          //Добавление единиц
    {
        y=cnt-x;
 
        for(i=0;i<y;i++)
        {
            for(j=x;j>0-1;j--)
            {
                c1[j]=c1[j-1];
            }
 
            c1[0]=1;
 
            x++;
        }
    }
 
    cout<<endl;
 
    for(z=0;z<x;z++)
        cout<<c1[z];
 
    cout<<endl;
 
    for(z=0;z<x;z++)
        cout<<c2[z];
 
    cout<<endl<<endl<<"Shifr: ";
 
    for(i=0;i<x;i++)                                                                     //Вывод
    {
        if(c1[i]==0 || c2[i]==0)
        {
            if(c1[i]==0)
            {
                cdd[i]=key[9][c2[i]-1];
 
                cout<<cdd[i];
            }
 
            if(c2[i]==0)
            {
                cdd[i]=key[c1[i]-1][9];
 
                cout<<cdd[i];
            }
        }
        else
        {
            cdd[i]=key[c1[i]-1][c2[i]-1];
 
            cout<<cdd[i];
        }
    }}
 
    if(M=='D')
    {cout<<endl<<endl<<"Mnozhitel: ";                                                         //ДЕШИФРОВАНИЕ
 
    cin>>mt;
 
    for(i=x-1;i>=0;i--)
    {
        xC+=y*c2s[i];
 
        y*=10;
    }
 
    y=10;
 
    xCe=xC/mt;
 
    while(xCe>0)                                                                            //Кол-во цифр
    {
        xCe=xCe-xCe%y;
 
        y*=10;
 
        cnt++;
    }
 
    xCe=xC/mt;
 
    cout<<xCe<<endl<<endl;
 
    for(i=cnt-1;i>-1;i--)                                                                               //Новая вторая строка
    {
        c2[i]=xCe%10;
 
        xCe/=10;
    }
 
    if(cnt!=x)                                                                                        //Удаление единиц
    {
        y=x-cnt;
 
        for(i=0;i<y;i++)
        {
            for(j=0;j<x-1;j++)
            {
                c1[j]=c1[j+1];
            }
 
            x--;
        }
    }
 
    cout<<endl<<endl<<"Slovo: ";
 
    for(i=0;i<x;i++)                                                                                   //Вывод
    {
        if(c1[i]==0 || c2[i]==0)
        {
            if(c1[i]==0)
            {
                cdd[i]=key[9][c2[i]-1];
 
                cout<<cdd[i];
            }
 
            if(c2[i]==0)
            {
 
                cdd[i]=key[c1[i]-1][9];
 
                cout<<cdd[i]<<" ";
            }
        }
        else
        {
            cdd[i]=key[c1[i]-1][c2[i]-1];
 
            cout<<cdd[i];
        }
    }}
 
    return 0;
}


Вернуться к обсуждению:
Программа шифрования слова периодически не работает C++
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2019, 17:32
Готовые ответы и решения:

Почему не полностью работает программа шифрования? шифрует ок, а дешифрирует плохо, теряет последние 2 символа
вот так. Помогите с проблемой. #include &lt;vcl&gt; #include &lt;conio&gt; #include &lt;iostream&gt; #include...

Неправильно работает программа шифрования-дешифрования
Program P_026_CRYPT; Var inF , outF :text; s :string; k :integer; const key = 2; ...

Как работает эта программа шифрования данных?
Привет. Я нащел программу но немогу разабраться как она работает. Пожалуйста помогите разобраться с...

Некорректно работает программа шифрования и дешифрования (ГОСТ 28147-89)
Прошу помочь с обнаружением и устранением ошибки(ошибок) в коде программы, реализующей шифрование и...

6
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2019, 17:32

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Исправить ошибки в программе шифрования слова
Program esep; uses crt; var s_out,a,alf,san,k:string; i,j,t,l,s,p:integer; Begin ClrScr; ...

Программа шифрования
Добрый день всем!Требуется помощь!:cry: Описываю ситуацию: есть алгоритм шифрования Blowfish(не...

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

Программа шифрования текста
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...

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