Форум программистов, компьютерный форум CyberForum.ru

Сеть Фейстеля для DES - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Функция подсчета количества символов http://www.cyberforum.ru/cpp-beginners/thread719641.html
С помощью функции вывести на экран количество символов предложения. int fun(int s=strlen()){ return s; } Жалкая попытка написать функцию, да и то пишет, что функция не перегружена".Наставьте на путь истинный!
C++ Выведите все числа от A до B включительно, в порядке возрастания, если A < B, или в порядке убывания в противном случае. пробовала сделать ,но выдаёт ошибки я не понимаю,что он требует ТЕКСТ ЗАДАЧИ. Даны два целых числа A и В (каждое в отдельной строке). Выведите все числа от A до B включительно, в порядке возрастания, если A < B, или в порядке убывания в противном случае. Например: Ввод Вывод 5 1 2 3 4 5 ПРОБНЫЙ ИСХОДНЫЙ КОД http://www.cyberforum.ru/cpp-beginners/thread719628.html
найти минимальное количество плиток которыми нужно покрыть пол. C++
Помогите пожалуйста с задачкой. Дана плошадь комнаты WxH и размеры кафеля A x B. Нужно найти минимальное количество плиток которыми нужно покрыть пол. Класть плитки нужно так, чтобы одна сторона плитки граничала максимум с одной плиткой и была параллельна одной из сторон комнаты. Поворачивать плитку нельзя, но резать вдоль одной из сторон можно, также разрезанный кусок можно разрезать на мелкие...
C++ Криво пишет даные в файл
Надо через структуры записать даные в файл. Компилюю, ввожу даные, записивает, открываю то что записал а там какието "иероглифы". В чем проблема? Как мне потом етот файл использовать, например для чтения в том же компиляторе? ВВожу токо английские буквы. #include <iostream> #include <stdio.h> #include <math.h> #include <conio.h> using namespace std; const int m=3; struct good { char...
C++ Программа Океаны http://www.cyberforum.ru/cpp-beginners/thread719618.html
Цель этой программной системы - обеспечить интерактивное экологическое моделирование. Она состоит из океана, который включает определенное пользователем число добычи, хищников и преград. Для этих трех параметров определены значения по умолчанию. Основные направления моделирования описаны ниже. 2. преграды статичны и не могут перемещаться; они препятствуют движению других объектов в океане....
C++ Найти главную диагональ матрици Народ, подскажите как найти главную диагональ матрицы на С++? Буду очень благодарен. подробнее

Показать сообщение отдельно
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
04.12.2012, 23:27     Сеть Фейстеля для DES
Ребят, помогите найти ошибку!
Написал алгоритм шифрования DES
шифрует правильно, а с расшифровкой проблема!,есть предположение что неправильно с ссылками что то делаю!
Помогите разобраться!
Des_code.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
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
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
#include <vector>
 
using namespace std;
//***********Функция перевода***************************************************
void charTbin(vector<char> mes,  vector<unsigned> &bin_mes)
{
  int i,j;
  char tmp;//временное хранение bin(из файла)
  for(i=0;i<mes.size();i++)//цикл для перевода символа в число
  {
    tmp = mes.at(i);
    //cout<<tmp<<" ";
    for(j=7; j>-1; j--) 
    {
      bin_mes.at(i*8+j)=tmp%2;
      tmp/=2;
       // cout<<bin.at(i);
    }
   
  }
 
 
}
 
 
 
//***********Функция начальной перестановки сообщения***************************
void mesIP(vector<unsigned> bin_mes, vector<unsigned> &bin_mes_IP)
{
 int Table1[64] = {57,49,41,33,25,17,9,1,
               59,51,43,35,27,19,11,3,
               61,53,45,37,29,21,13,5,
               63,55,47,39,31,23,15,7,
               56,48,40,32,24,16,8,0,
               58,50,42,34,26,18,10,2,
               60,52,44,36,28,20,12,4,
               62,54,46,38,30,22,14,6};//таблица начальной перестановки (табл№1)
 vector<int> IP;
 IP.assign(Table1,Table1+64);
                      
  int q=0;
  for(int i=0;i<64;i++)
  {
         
    q=IP.at(i);
  
    bin_mes_IP.at(i)=bin_mes.at(q);
 
  }
}
//************Функция перестановки ключа****************************************
void keyIP(vector<unsigned> bin_pass,vector<unsigned> &bin_pass_IP)
{
  int Table2[56] = {56,48,40,32,24,16,8,
              0,57,49,41,33,25,17,
              9,1,58,50,42,34,26,
              18,10,2,59,51,43,35,
              62,54,46,38,30,22,14,
              6,61,53,45,37,29,21,
              13,5,60,52,44,36,28,
              20,12,4,27,19,11,3};//таблица преобразования ключа
vector<int> B;
 B.assign(Table2,Table2+64);
                      
  int q1=0;
  for(int i=0;i<56;i++)
  {
    q1=B.at(i);
    bin_pass_IP.at(i)=bin_pass.at(q1);
  }
}
//************Функция разбиения сообщения на две 32-х битные части**************
void break_into_pieces_mes(vector<unsigned> bin_mes_IP, vector<unsigned> &L0_bin_mes_IP,vector<unsigned> &R0_bin_mes_IP)
{
  for(int i=0;i<64;i++)
  {
    if (i<32) L0_bin_mes_IP.at(i)=bin_mes_IP.at(i);
    else R0_bin_mes_IP.at(i-32) = bin_mes_IP.at(i);
  }
}
//************Функция разбиения пароля на две 28-и битные части*****************
void break_into_pieces_pass(vector<unsigned>  bin_pass_IP, vector<unsigned>  &L0_bin_pass_IP,vector<unsigned>  &R0_bin_pass_IP)
{
  for(int i=0;i<56;i++)
  {
    if(i<28) L0_bin_pass_IP.at(i)= bin_pass_IP.at(i);
    else R0_bin_pass_IP.at(i-28) = bin_pass_IP.at(i);
  }
}
//************Функция сдвига****************************************************
void  sdvig(vector<unsigned> Start,int a,vector<unsigned> &Result)
{     unsigned start[28],result[28];
      for(int i=0;i < 28; i++ )
      {start[i]=Start.at(i);
       result[i]=Result.at(i);
      }                  
    int i;
    for( i = 0; i < 28; i++ )
        *( result + i ) = *( start + i );
    while( a-- )
    {
        int tmp = *result;
        unsigned *r = result;        
        for( i = 0; i < 28-1 ; i++ )
            *( r + i ) = *( r + i + 1 );
        *( r + i ) = tmp;    
    }
   
 Start.assign(start,start+28);
 Result.assign(result,result+28);
}
//*********Функция объединения 2-х половин после сдвига*************************
void L0_R0(vector<unsigned> L0_bin_pass_IP_sdvig,vector<unsigned> R0_bin_pass_IP_sdvig,vector<unsigned> &L0_R0_sdvig)
{
  for(int i=0;i<56;i++)
  {
    if(i<28) L0_R0_sdvig.at(i)=L0_bin_pass_IP_sdvig.at(i);
    else L0_R0_sdvig.at(i) = R0_bin_pass_IP_sdvig.at(i-28);                 
  }
}
//*********Функция сжатия ключа*************************************************
void L0R0sdvigIP(vector<unsigned> L0_R0_sdvig, vector<unsigned>  &L0_R0_sdvig_IP)
{
  unsigned Table3[48] = {13,16,10,23,0,4,
                        2,27,14,5,20,9,
                        22,18,11,3,25,7,
                        15,6,26,19,12,1,
                        40,51,30,36,46,54,
                        29,39,50,44,32,47,
                        43,48,38,55,33,52,
                        45,41,49,35,28,31};
  vector<int> table;
 table.assign(Table3,Table3+48);
                      
  int q=0;
  for(int i=0;i<48;i++)
  {
    q=table.at(i);
    L0_R0_sdvig_IP.at(i)=L0_R0_sdvig.at(q);
  }
}
//******************************************************************************
//*********
//***********Функция расширения правой части сообщения**************************
void newR0(vector<unsigned> R0_bin_mes_IP, vector<unsigned> &newR48)
{
  unsigned Table4[48] = {31,0,1,2,3,4,
                    3,4,5,6,7,8,
                    7,8,9,10,11,12,
                    11,12,13,14,15,16,
                    15,16,17,18,19,20,
                    19,20,21,22,23,24,
                    23,24,25,26,27,28,
                    27,28,29,30,31,0};//таблица расширения
  vector<int> E;
 E.assign(Table4,Table4+48);
  int q1=0;
  for(int i=0;i<48;i++)
  {
    q1=E.at(i);
    newR48.at(i)=R0_bin_mes_IP.at(q1); 
  }
}
//******************************************************************************
void xor1(vector<unsigned> L0_R0_sdvig_IP,vector<unsigned> newR48, vector<unsigned> &Xor)
{
 
    for(int i=0;i<48;i++)
      Xor.at(i) = newR48.at(i)^L0_R0_sdvig_IP.at(i);
}
//*************************SBox*************************************************
 
//***нахождение индексов для s-box
int indexI(unsigned tmp1[])
{
  int q;  
  if(tmp1[0]==0 && tmp1[5]==0) {q=0;return q;}
  if(tmp1[0]==0 && tmp1[5]==1) {q=1;return q;}
  if(tmp1[0]==1 && tmp1[5]==0) {q=2;return q;}
  if(tmp1[0]==1 && tmp1[5]==1) {q=3;return q;}
}
int indexJ(unsigned tmp1[])
{
  int w;
  if(tmp1[1]==0 && tmp1[2]==0 && tmp1[3]==0 && tmp1[4]==0) {w=0;return w;}
  if(tmp1[1]==0 && tmp1[2]==0 && tmp1[3]==0 && tmp1[4]==1) {w=1;return w;}
  if(tmp1[1]==0 && tmp1[2]==0 && tmp1[3]==1 && tmp1[4]==0) {w=2;return w;}
  if(tmp1[1]==0 && tmp1[2]==0 && tmp1[3]==1 && tmp1[4]==1) {w=3;return w;}
  if(tmp1[1]==0 && tmp1[2]==1 && tmp1[3]==0 && tmp1[4]==0) {w=4;return w;}
  if(tmp1[1]==0 && tmp1[2]==1 && tmp1[3]==0 && tmp1[4]==1) {w=5;return w;}
  if(tmp1[1]==0 && tmp1[2]==1 && tmp1[3]==1 && tmp1[4]==0) {w=6;return w;}
  if(tmp1[1]==0 && tmp1[2]==1 && tmp1[3]==1 && tmp1[4]==1) {w=7;return w;}
  if(tmp1[1]==1 && tmp1[2]==0 && tmp1[3]==0 && tmp1[4]==0) {w=8;return w;}
  if(tmp1[1]==1 && tmp1[2]==0 && tmp1[3]==0 && tmp1[4]==1) {w=9;return w;}
  if(tmp1[1]==1 && tmp1[2]==0 && tmp1[3]==1 && tmp1[4]==0) {w=10;return w;}
  if(tmp1[1]==1 && tmp1[2]==0 && tmp1[3]==1 && tmp1[4]==1) {w=11;return w;}
  if(tmp1[1]==1 && tmp1[2]==1 && tmp1[3]==0 && tmp1[4]==0) {w=12;return w;}
  if(tmp1[1]==1 && tmp1[2]==1 && tmp1[3]==0 && tmp1[4]==1) {w=13;return w;}
  if(tmp1[1]==1 && tmp1[2]==1 && tmp1[3]==1 && tmp1[4]==0) {w=14;return w;}
  if(tmp1[1]==1 && tmp1[2]==1 && tmp1[3]==1 && tmp1[4]==1) {w=15;return w;}
}
//*********
void S_Box(vector<unsigned> Xor,vector<unsigned> &SBox)
{
   int S1[4][16] = {{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7},
                    {0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8},
                    {4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0},
                    {15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}};               
   int S2[4][16] = {{15,1,8,114,6,11,3,4,9,7,2,13,12,0,5,10},
                         {3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5},
                         {0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15},
                         {13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9}};  
   int S3[4][16] = {{10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8},
                         {13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1},
                         {13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7},
                         {1,10,13,0,6,9,8,7,4,15,4,3,11,5,2,12}
                        };
   int S4[4][16] = {{7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15},
                         {13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9},
                         {10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4},
                         {3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14}
                        };
   int S5[4][16] = {{2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9},
                         {14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6},
                         {4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14},
                         {11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3}
                        };
   int S6[4][16] = {{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11},
                         {10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8},
                         {9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6},
                         {4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13}
                        };
   int S7[4][16] = {{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1},
                         {13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6},
                         {1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2},
                         {6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12}
                        };
   int S8[4][16] = {{13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7},
                         {1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2},
                         {7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8},
                         {2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}
                        };     
  unsigned tmp[6],tmp1[6],tmp2[6],tmp3[6],tmp4[6],tmp5[6],tmp6[6],tmp7[6];
  int tmp8,tmp9,tmp10,tmp11,tmp12,tmp13,tmp14,tmp15;
  int q,w,p=0,t,st,i;
  
  for(i=0;i<6;i++)    tmp[i]=Xor.at(i); 
  for(i=6;i<12;i++)   tmp1[i-6]=Xor.at(i); 
  for(i=12;i<18;i++)  tmp2[i-12]=Xor.at(i); 
  for(i=18;i<24;i++)  tmp3[i-18]=Xor.at(i); 
  for(i=24;i<30;i++)  tmp4[i-24]=Xor.at(i); 
  for(i=30;i<36;i++)  tmp5[i-30]=Xor.at(i); 
  for(i=36;i<42;i++)  tmp6[i-36]=Xor.at(i); 
  for(i=42;i<48;i++)  tmp7[i-42]=Xor.at(i); 
  
  q = indexI(tmp);
  w = indexJ(tmp); 
  tmp8 = S1[q][w]; 
 
  q = indexI(tmp1);
  w = indexJ(tmp1); 
  tmp9 = S2[q][w]; 
 
  q = indexI(tmp2);
  w = indexJ(tmp2); 
  tmp10 = S3[q][w]; 
 
  q = indexI(tmp3);
  w = indexJ(tmp3); 
  tmp11 = S4[q][w]; 
 
  q = indexI(tmp4);
  w = indexJ(tmp4); 
  tmp12 = S5[q][w]; 
 
  q = indexI(tmp5);
  w = indexJ(tmp5); 
  tmp13 = S6[q][w]; 
 
  q = indexI(tmp6);
  w = indexJ(tmp6); 
  tmp14 = S7[q][w]; 
 
  q = indexI(tmp7);
  w = indexJ(tmp7); 
  tmp15 = S8[q][w]; 
  
  unsigned tmpS[8];
  tmpS[0]=tmp8; tmpS[1]=tmp9;
  tmpS[2]=tmp10; tmpS[3]=tmp11;
  tmpS[4]=tmp12; tmpS[5]=tmp13;
  tmpS[6]=tmp14; tmpS[7]=tmp15;
 
  int z;//временное хранение bin
  for(int i=0;i<8;i++)
  {
    z = tmpS[i];
    for(int j=3; j>-1; j--) 
    {
      SBox.at(i*4+j)=z%2;
      z/=2;
    }
  }
}
 
//**************Функция результата основной функции des*************************
void P_peres(vector<unsigned>  SBox, vector<unsigned>  &desF)
{
  int P[32] = {15,6,19,20,28,1,27,16,0,14,22,25,4,17,30,9,1,7,23,13,31,26,2,8,18,12,29,5,21,10,3,24};   
  int p=0;
  for(int i=0;i<32;i++)
  {
    p=P[i];
    desF.at(i)=SBox.at(p);
  }
}
//********
void xor2(vector<unsigned> L0_bin_mes_IP, vector<unsigned> desF, vector<unsigned> &xorFandL0)
{
  for(int i=0;i<32;i++)
  { 
    xorFandL0.at(i) =L0_bin_mes_IP.at(i) ^ desF.at(i);
  }             
}
//******************************************************************************
void pluz(vector<unsigned> xorFandL0,vector<unsigned> R0_bin_mes_IP, vector<unsigned> &rez,vector<unsigned> &code1)
{
  for (int i=0;i<64;i++)
  {
    if(i<32)  rez.at(i) = R0_bin_mes_IP.at(i);
    else rez.at(i) = xorFandL0.at(i-32);
  }
  for(int i=0;i<8;i++)//цикл для перевода символа в число
  {
    int t = 0, st = 1;
    for(int j=7; j>-1; j--) 
    {
      t += rez.at(i*8+j)*st;
      st*=2;
    }
    code1.at(i) = t;
  }
 
}
//******************
void EndIP(vector<unsigned> rez,vector<unsigned> &End)
{
  int p=0;   
  int IP_1[64] = {39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25,32,0,40,8,48,16,56,24};
  for(int i=0;i<64;i++)
  {
    p=IP_1[i];
    End.at(i)=rez.at(p);
  }
}
//**************
void codeDES(vector<unsigned> End, vector<unsigned> &code)
{
  for(int i=0;i<8;i++)//цикл для перевода символа в число
  {
    int t = 0, st = 1;
    for(int j=7; j>-1; j--) 
    {
      t += End.at(i*8+j)*st;
      st*=2;
    }
    code.at(i) = t;
  }
}
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
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
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
#include <cstdlib>
#include <iostream>
//******************************************************************************
#include "des_code.h"
#include "des_decode.h"
#include <windows.h>
#include <vector>
#include<fstream>
char bufRus[256];
char* Rus(char* mes)
{
  CharToOem(mes, bufRus);
  return bufRus;
}
//******************************************************************************
using namespace std;
 
//******************************************************************************
int main(int argc, char *argv[])
{
//*************Блок переменных**************************************************
  ///char mes[8];//исходное сообщение
  vector<char> mes,CCmes;
  vector<char> pass;
  vector<unsigned> Cmes;
  Cmes.resize(8);
  CCmes.resize(8);
 
  int choose;//переменныя выбора режима работы программы
  
//*************Блок ввода данных************************************************
 ifstream input_file("massege.txt"); // Файл с данными
  char e; 
  while(true) // Перемещаем элементы из файла в вектор
  {
    input_file>>e;  
    if(!input_file.eof()) mes.push_back(e);
    else break;
  }
input_file.close();
ifstream file("PASS.txt"); // Файл с данными
  char a; 
  while(true) // Перемещаем элементы из файла в вектор
  {
    file>>a;     
    if(!file.eof()) pass.push_back(a);
    else break;
  }
  file.close(); 
//*************Блок выбора режима***********************************************
  cout<<Rus("Выберите режим работы программы:\n1.Шифрование.\n2.Расшифровка.\n0.Выход");
  do
  {
 
    cout<<Rus("\nВыш выбор: ");
    cin>>choose;   
//***********************switch*************************************************
    switch(choose)
    {//start switcha
      case 1:{//start case1
      
 
  
  
               cout<<Rus("Выбран режим шифрования.\n");
               cout<<Rus("Исходное сообщение:");
                for(int i=0;i<mes.size();i++){
           cout<<mes.at(i);
   }
           
             //  pass[8]='\0';
               cout<<Rus("\nПароль шифрования:");
                for(int i=0;i<pass.size();i++){
           cout<<pass.at(i);
   }
        cout<<endl;   
//*********Блок переменных используемых в case 1 *******************************
                vector<unsigned> bin_mes;
               bin_mes.resize(64);//переменная под перевод из char в bin сообщения
             
              vector<unsigned> bin_pass;
               bin_pass.resize(64);//переменная под перевод из char в bin пароля
             
              vector<unsigned> bin_mes_IP;
               bin_mes_IP.resize(64);//под начальную перестановку
               
                vector<unsigned>  bin_pass_IP;
                 bin_pass_IP.resize(56);//преобразование ключа
                 
               vector<unsigned> R0_bin_mes_IP;//под разбиения на 32 бита (правая часть)
              R0_bin_mes_IP.resize(32);
              
              vector<unsigned> L0_bin_mes_IP;//под разбиения на 32 бита (левая часть)
              L0_bin_mes_IP.resize(32);
              
               vector<unsigned> R0_bin_pass_IP;//под разбиения на 28 бита (правая часть)
               R0_bin_pass_IP.resize(28);
               
               vector<unsigned> L0_bin_pass_IP;//под разбиения на 28 бита (левая часть)
               L0_bin_pass_IP.resize(28);
               
               vector<unsigned> R0_bin_pass_IP_sdvig;//под разбиения на 28 бита со сдвигом (правая часть)
               R0_bin_pass_IP_sdvig.resize(28);
               
              vector<unsigned> L0_bin_pass_IP_sdvig;;//под разбиения на 28 бита со сдвигом (левая часть)
              L0_bin_pass_IP_sdvig.resize(28);
              
                vector<unsigned> L0_R0_sdvig;//объединение частей в один массив
                L0_R0_sdvig.resize(56);
                
              vector<unsigned> L0_R0_sdvig_IP;//сжатие ключа
              L0_R0_sdvig_IP.resize(48);
              
                vector<unsigned> newR48;//новая правая половина сообщения
                newR48.resize(48);
                
               vector<unsigned> Xor;//xor newR48 и L0_R0_sdvig_IP
                Xor.resize(48);
                
               vector<unsigned> SBox;//для s-box
               SBox.resize(48);
               
               vector<unsigned> desF;//для основной ф-ции des
               desF.resize(32);
               
               vector<unsigned>  xorFandL0;
               xorFandL0.resize(32);
               
               vector<unsigned> rez;
               rez.resize(64);
               
               vector<unsigned> code1;
               code1.resize(8);
               
               vector<unsigned> End;
               End.resize(64);
               
//*********Блок вызова функций**************************************************
                 charTbin(mes, bin_mes);//вызов ф-ции для перевода сообщения 
                 charTbin(pass,bin_pass);//вызов ф-ции для перевода пароля
                 mesIP(bin_mes,bin_mes_IP);//вызов ф-ции начальная перестановка сообщения
                 keyIP(bin_pass,bin_pass_IP);//вызов ф-ции перестановки ключа
                 break_into_pieces_mes(bin_mes_IP,L0_bin_mes_IP,R0_bin_mes_IP);//вызов ф-ции разбиения на 2 части сообщения
                 break_into_pieces_pass(bin_pass_IP,L0_bin_pass_IP,R0_bin_pass_IP);//вызов ф-ции разбиения на 2 части пароля
                 sdvig(L0_bin_pass_IP,1,L0_bin_pass_IP_sdvig);//вызов ф-ции сдвига левой части пароля
                 sdvig(R0_bin_pass_IP,1,R0_bin_pass_IP_sdvig);//вызов ф-ции сдвига правой части пароля
                 L0_R0(L0_bin_pass_IP_sdvig,R0_bin_pass_IP_sdvig,L0_R0_sdvig);//вызов ф-ции объединения 2-ч половин после сдвига
                 L0R0sdvigIP(L0_R0_sdvig,L0_R0_sdvig_IP);//вызов ф-ции получение последовательности К(i)
                 newR0(R0_bin_mes_IP,newR48);//вызов ф-ции расширения правой части сообщения
                 xor1(L0_R0_sdvig_IP,newR48,Xor);//вызов ф-ции исключающее ИЛИ
                 S_Box(Xor,SBox);//вызов ф-ции нахождение значений по таблицам S_Box
                 P_peres(SBox,desF);//вызов ф-ции нахождения результата основной ф-ции des
                 xor2(L0_bin_mes_IP,desF,xorFandL0);
                 pluz(xorFandL0,R0_bin_mes_IP,rez,code1);
                 EndIP(rez,End);
               codeDES(End,Cmes);
//*********Блок вывода данных на экран******************************************
              cout<<Rus("Перевод сообщения в bin:\n");
              for(int i=0;i<(mes.size()*8);i++) cout<<bin_mes.at(i);
             cout<<Rus("\nПеревод пароля в bin:\n");
               for(int i=0;i<(pass.size()*8);i++)  cout<<bin_pass.at(i);
              cout<<Rus("\nНачальная перестановка сообщения:\n");
               for(int  i=0;i<64;i++)  cout<<bin_mes_IP.at(i);
               cout<<Rus("\nПерестановка ключа:\n");
               for(int i=0;i<56;i++)  cout<<bin_pass_IP.at(i);
               cout<<Rus("\nL0 сообщения:");
               for(int i=0;i<32;i++)  cout<<L0_bin_mes_IP.at(i);
               cout<<Rus("\nR0 сообщения:");
               for(int i=0;i<32;i++)  cout<<R0_bin_mes_IP.at(i);
               cout<<Rus("\nL0 ключа:");
               for(int i=0;i<28;i++)  cout<<L0_bin_pass_IP.at(i);
               cout<<Rus("\nR0 ключа:");
               for(int i=0;i<28;i++)  cout<<R0_bin_pass_IP.at(i);
               cout<<Rus("\nL0 ключа со сдвигом:");
               for(int i=0;i<28;i++)  cout<<L0_bin_pass_IP_sdvig.at(i);
               cout<<Rus("\nR0 ключа со сдвигом:");
               for(int i=0;i<28;i++)  cout<<R0_bin_pass_IP_sdvig.at(i);
               cout<<Rus("\nОбъединение L0 ключа со сдвигом + R0 ключа со сдвигом:\n");
               for(int i=0;i<56;i++)  cout<<L0_R0_sdvig.at(i);
               cout<<Rus("\nСжатие ключа:\n");
               for(int i=0;i<48;i++)  cout<<L0_R0_sdvig_IP.at(i);
               cout<<Rus("\nРасширение R0 сообщения:\n");
               for(int i=0;i<48;i++)  cout<<newR48.at(i);
               cout<<Rus("\nИсключающее ИЛИ:\n");
               for(int i=0;i<48;i++)  cout<<Xor.at(i);
               cout<<Rus("\nS-Box:\n");
               for(int i=0;i<32;i++)  cout<<SBox.at(i);
               cout<<Rus("\nРезультат основной ф-ции des:\n");
               for(int i=0;i<32;i++)  cout<<desF.at(i);
               cout<<Rus("\nИсключающее ИЛИ:\n");
               for(int i=0;i<32;i++)  cout<<xorFandL0.at(i);
               cout<<Rus("\nОбъединение левой с правой частью:\n");
               for(int i=0;i<64;i++)  cout<<rez.at(i);
               cout<<"\nchar:";
               for(int i=0;i<8;i++)  cout<<code1.at(i)<<" ";
               cout<<Rus("\nКонечная перестановка:\n");
               for(int i=0;i<64;i++)  cout<<End.at(i);
               cout<<Rus("\nЗашифрованное сообщение:\nint: ");
               for(int i=0;i<8;i++)  cout<<Cmes.at(i)<<" ";
               cout<<Rus("\nЗашифрованное сообщение:\nchar: ");
               for(int i=0;i<8;i++)  cout<<(char)Cmes.at(i);
                        
               
 
 
                
           }break;//end case1
      case 2:{//start case2
 
 
//******************************************************************************
              for(int i=0;i<8;i++)
               {
                 CCmes[i] = (char)Cmes[i];  
                 cout<<CCmes[i]<<" "; 
               } 
//*********Блок переменных используемых в case 1 *******************************
               vector<unsigned> Dbin_mes;
               Dbin_mes.resize(64);//переменная под перевод из char в bin сообщения
             
              vector<unsigned> bin_pass;
               bin_pass.resize(64);//переменная под перевод из char в bin пароля
             
              vector<unsigned> bin_mes_IP;
               bin_mes_IP.resize(64);//под начальную перестановку
               
                vector<unsigned>  bin_pass_IP;
                 bin_pass_IP.resize(56);//преобразование ключа
                 
               vector<unsigned> R0_bin_mes_IP;//под разбиения на 32 бита (правая часть)
              R0_bin_mes_IP.resize(32);
              
              vector<unsigned> L0_bin_mes_IP;//под разбиения на 32 бита (левая часть)
              L0_bin_mes_IP.resize(32);
              
               vector<unsigned> R0_bin_pass_IP;//под разбиения на 28 бита (правая часть)
               R0_bin_pass_IP.resize(28);
               
               vector<unsigned> L0_bin_pass_IP;//под разбиения на 28 бита (левая часть)
               L0_bin_pass_IP.resize(28);
               
               vector<unsigned> R0_bin_pass_IP_sdvig;//под разбиения на 28 бита со сдвигом (правая часть)
               R0_bin_pass_IP_sdvig.resize(28);
               
              vector<unsigned> L0_bin_pass_IP_sdvig;;//под разбиения на 28 бита со сдвигом (левая часть)
              L0_bin_pass_IP_sdvig.resize(28);
              
                vector<unsigned> L0_R0_sdvig;//объединение частей в один массив
                L0_R0_sdvig.resize(56);
                
              vector<unsigned> L0_R0_sdvig_IP;//сжатие ключа
              L0_R0_sdvig_IP.resize(48);
              
                vector<unsigned> newR48;//новая правая половина сообщения
                newR48.resize(48);
                
               vector<unsigned> Xor;//xor newR48 и L0_R0_sdvig_IP
                Xor.resize(48);
                
               vector<unsigned> SBox;//для s-box
               SBox.resize(48);
               
               vector<unsigned> desF;//для основной ф-ции des
               desF.resize(32);
               
               vector<unsigned>  xorFandL0;
               xorFandL0.resize(32);
               
               vector<unsigned> rez;
               rez.resize(64);
               
               vector<unsigned> code1;
               code1.resize(8);
               
               vector<unsigned> End;
               End.resize(64);
               
//*********Блок вызова функций**************************************************
                 DcharTbin(CCmes,Dbin_mes);//вызов ф-ции для перевода сообщения 
              /*  charTbin(pass,bin_pass);//вызов ф-ции для перевода пароля
                mesIP(bin_mes,bin_mes_IP);//вызов ф-ции начальная перестановка сообщения
                keyIP(bin_pass,bin_pass_IP);//вызов ф-ции перестановки ключа
                break_into_pieces_mes(bin_mes_IP,L0_bin_mes_IP,R0_bin_mes_IP);//вызов ф-ции разбиения на 2 части сообщения
                break_into_pieces_pass(bin_pass_IP,L0_bin_pass_IP,R0_bin_pass_IP);//вызов ф-ции разбиения на 2 части пароля
                sdvig(L0_bin_pass_IP,1,L0_bin_pass_IP_sdvig);//вызов ф-ции сдвига левой части пароля
                sdvig(R0_bin_pass_IP,1,R0_bin_pass_IP_sdvig);//вызов ф-ции сдвига правой части пароля
                L0_R0(L0_bin_pass_IP_sdvig,R0_bin_pass_IP_sdvig,L0_R0_sdvig);//вызов ф-ции объединения 2-ч половин после сдвига
                L0R0sdvigIP(L0_R0_sdvig,L0_R0_sdvig_IP);//вызов ф-ции получение последовательности К(i)
                newR0(R0_bin_mes_IP,newR48);//вызов ф-ции расширения правой части сообщения
               xor1(L0_R0_sdvig_IP,newR48,Xor);//вызов ф-ции исключающее ИЛИ
               S_Box(Xor,SBox);//вызов ф-ции нахождение значений по таблицам S_Box
              P_peres(SBox,desF);//вызов ф-ции нахождения результата основной ф-ции des
              xor2(L0_bin_mes_IP,desF,xorFandL0);
              pluz(xorFandL0,R0_bin_mes_IP,rez,code1);
              EndIP(rez,End);
              codeDES(End,Cmes);*/
//*********Блок вывода данных на экран******************************************
              cout<<Rus("Перевод сообщения в bin:\n");
              for(int i=0;i<(CCmes.size()*8);i++) cout<<Dbin_mes.at(i);
            /* cout<<Rus("\nПеревод пароля в bin:\n");
               for(int i=0;i<(pass.size()*8);i++)  cout<<bin_pass.at(i);
              cout<<Rus("\nНачальная перестановка сообщения:\n");
               for(int  i=0;i<64;i++)  cout<<bin_mes_IP.at(i);
               cout<<Rus("\nПерестановка ключа:\n");
               for(int i=0;i<56;i++)  cout<<bin_pass_IP.at(i);
               cout<<Rus("\nL0 сообщения:");
               for(int i=0;i<32;i++)  cout<<L0_bin_mes_IP.at(i);
               cout<<Rus("\nR0 сообщения:");
               for(int i=0;i<32;i++)  cout<<R0_bin_mes_IP.at(i);
               cout<<Rus("\nL0 ключа:");
               for(int i=0;i<28;i++)  cout<<L0_bin_pass_IP.at(i);
               cout<<Rus("\nR0 ключа:");
               for(int i=0;i<28;i++)  cout<<R0_bin_pass_IP.at(i);
               cout<<Rus("\nL0 ключа со сдвигом:");
               for(int i=0;i<28;i++)  cout<<L0_bin_pass_IP_sdvig.at(i);
               cout<<Rus("\nR0 ключа со сдвигом:");
               for(int i=0;i<28;i++)  cout<<R0_bin_pass_IP_sdvig.at(i);
               cout<<Rus("\nОбъединение L0 ключа со сдвигом + R0 ключа со сдвигом:\n");
               for(int i=0;i<56;i++)  cout<<L0_R0_sdvig.at(i);
               cout<<Rus("\nСжатие ключа:\n");
               for(int i=0;i<48;i++)  cout<<L0_R0_sdvig_IP.at(i);
               cout<<Rus("\nРасширение R0 сообщения:\n");
               for(int i=0;i<48;i++)  cout<<newR48.at(i);
               cout<<Rus("\nИсключающее ИЛИ:\n");
               for(int i=0;i<48;i++)  cout<<Xor.at(i);
               cout<<Rus("\nS-Box:\n");
               for(int i=0;i<32;i++)  cout<<SBox.at(i);
               cout<<Rus("\nРезультат основной ф-ции des:\n");
               for(int i=0;i<32;i++)  cout<<desF.at(i);
               cout<<Rus("\nИсключающее ИЛИ:\n");
               for(int i=0;i<32;i++)  cout<<xorFandL0.at(i);
               cout<<Rus("\nОбъединение левой с правой частью:\n");
               for(int i=0;i<64;i++)  cout<<rez.at(i);
               cout<<"\nchar:";
               for(int i=0;i<8;i++)  cout<<code1.at(i)<<" ";
               cout<<Rus("\nКонечная перестановка:\n");
               for(int i=0;i<64;i++)  cout<<End.at(i);
               cout<<Rus("\nЗашифрованное сообщение:\nint: ");
               for(int i=0;i<8;i++)  cout<<Cmes.at(i)<<" ";
               cout<<Rus("\nЗашифрованное сообщение:\nchar: ");
               for(int i=0;i<8;i++)  cout<<(char)Cmes.at(i);*/
           }break;//end case2
      case 0:break;
      default: cout<<Rus("Введен не правильный символ! Повторите ввод.\n"); 
    }//end switcha
  }while(choose!=0);//конец цикла для провторения выбора режима работы программы
  system("PAUSE");
  return EXIT_SUCCESS;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru