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

Необходимо отладить программу светофор

01.11.2023, 17:11. Показов 901. Ответов 2

Author24 — интернет-сервис помощи студентам
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
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
#define EN0     0          /* MODE == encrypt */
#define DE1     1          /* MODE == decrypt */
 
typedef struct {
    unsigned long ek[32];
    unsigned long dk[32];
} des_ctx;
 
extern void deskey (unsigned char *, short);
/*             hexkey[8]              MODE
 
*Sets the internal key register according to the hexadecimal
*key contained in the 8 bytes of hexkey, according to the DES,
*for encryption or decryption according to MODE.
*/
 
extern void usekey(unsigned long *);
/*               cookedkey[32]
 
*Loads the internal key register with the data in cookedkey.
*/
extern void cpkey(unsigned long *);
/*              cookedkey[32]
*Copies the contents of the internal key register into the storage
*located at &cookedkey[0].
*/
 
extern void des(unsigned char *, unsigned char *);
/*               from[8]        to[8]
*Encrypts/Descrypts (according to the key currently loaded in the
*internal key register) one block of eight bytes at address ‘from’
*into the block at address ‘to’. They can be the same.
*/
 
static void scrunch(unsigned char *, unsigned long *);
static void unscrun(unsigned long *, unsigned char *);
static void desfunc(unsigned long *, unsigned long *);
static void cookey(unsigned long *);
 
static unsigned long KnL[32] = { 0L };
static unsigned long KnR[32] = { 0L };
static unsigned long Kn3[32] = { 0L };
static unsigned char Df_Key[24] = {
      0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
      0xef,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,
      0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67 };
 
Static unsigned short bytebit[8]   = {
0200, 0100, 040, 020, 010, 04, 02, 01 };
 
static unsigned long bigbyte[24] = {
0x800000L, 0x400000L, 0x200000L, 0x100000L,
0x80000L,  0x40000L,  0x20000L,  0x10000L,
0x8000L,   0x4000L,   0x2000L,   0x1000L,
0x800L,    0x400L,    0x200L,    0x100L,
0x80L,     0x40L,     0x20L,     0x10L,
0x8L,      0x4L,      0x2L,      0x1L };
 
/* Use the key schedule specified in the Standart (ANSI X3.92-1981).
 
*/ static unsigned char pc1[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};
 
static unsigned char totrot[16] = {
    1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28 };
 
static unsigned char pc2[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 };
 
voiddeskey(key, edf) 
unsigned char *key; 
shortedf;
{
registerint I, j, l, m, n;
 
unsigned char pc1m[56], pcr[56];
unsigned long kn[32];
 
for (j = 0; j < 56; j++ ) {
   l = pc1[j]; 
   m = l & 07;
   pc1[j] = (key[1 >> 3] &bytebit[m]) ? 1 : 0;
   }
for(i = 0 < 16; i++ ) {
   if(edf == de1 ) m = (15 - i) <<1; else m = I <<1;
   n = m + 1;
   kn[m] = kn[n] = 0L; 
   for( j = 0; j < 28; j++ ) {
        l = j + totrot[i];
        if( l < 28 ) pcr[j] = pc1m[l]; 
        elsepcr[j] = pc1m[l – 28];
        }
for( j = 28; j < 56; j++ ) {
   l = j + totrot[i];
   if( l < 56 ) pcr[j] = pc1m[l];
   elsepcr[j] = pc1m[l – 28];
   }
for( j = 0; j < 24; j++ ) {
   if(pcr[pc2[j]] ) kn[m] |= bigbyte[j];
   if(pcr[pc2[j+24]] ) kn[m] |= bigbyte[j];
   }
}
cookey(kn);
return;
}
 
static void cookey(raw1) 
register unsigned long *raw1;
{
   register unsigned long *cook, *raw0;
   unsigned long dough[32];
   registerint I;
 
   cook = dough;
   for( I = 0; I < 16; i++, raw1++ ) {
      raw0 = raw1++;
      *cook   = (*raw0 & 0x00fc0000L) << 6;
      *cook |= (*raw0 & 0x00000fc0L) << 10;
      *cook |= (*raw1 & 0x00fc0000L) >> 10;
      *cook++       |= (*raw1 & 0x00000fc0L) >> 6;
      *cook     = (*raw0 & 0x0003f000L) << 12;
      *cook  |= (*raw0 & 0x0000003fL) << 16;
      *cook     |= (*raw1 & 0x0003f000L) >> 4;
      *cook++             |= (*raw1 & 0x0000003fL);
      }
 
usekey (dough); 
return;
}
 
voidcpkey(into)
register unsigned long *into;
{
      register unsigned long *from, *endp; 
      from = KnL, endp = &KnL[32];
      while ( from <endp ) *into++=*from++;
      return;
}
 
voidusekey(from)
register unsigned long *from;
{
      register unsigned long *to, *endp;
 
      to = KnL, endp = &KnL[32];
      while ( to <endp ) *to++=*from++; 
      return;
}
 
void des(inblock, outblock)
unsigned char *inblock *outblock;
{
      unsigned long work[2];
 
      scrunch(inblock, work); 
      desfunc(work, KnL);
      unscrun(work, outblock); 
      return;
}
 
static void scrunch(outof, into)
register unsigned char *outof;
register unsigned long *into;
{
      *into = (*outof++ & 0xffL) << 24;
      *into |= (*outof++ & 0xffL) << 16;
      *into |= (*outof++ & 0xffL) << 8;
      *into++ |= (*outof++ & 0xffL);
      *into = (*outof++ & 0xffL) << 24;
      *into |= (*outof++ & 0xffL) << 16;
      *into |= (*outof++ & 0xffL) << 8;
      *into++ |= (*outof& 0xffL);
return;
}
 
static void unscrun (out of, into)
register unsigned char *outof;
register unsigned long *into;
{
      *into++ = (*outof>> 24) & 0xffL;
      *into++ = (*outof>> 16) & 0xffL;
      *into++ = (*outof>> 8) & 0xffL;
      *into++ = *outof++ & 0xffL;
      *into++ = (*outof>> 24) & 0xffL;
      *into++ = (*outof>> 16) & 0xffL;
      *into++ = (*outof>> 8) & 0xffL;
      *into++ = *outof& 0xffL;
return;
}
 
static unsigned long SP1[64]={
      0x01010400L, 0x00000000L, 0x00010000L, 0x01010404L,
      0x01010004L, 0x00010404L, 0x00000004L, 0x00010000L,
      0x00000400L, 0x01010400L, 0x01010404L, 0x00000400L,
      0x01000404L, 0x01010004L, 0x01000000L, 0x00000004L,
      0x00000404L, 0x01000400L, 0x01000400L, 0x00010400L,
      0x00010400L, 0x01010000L, 0x01010000L, 0x01000404L,
      0x00010004L, 0x01000004L, 0x01000004L, 0x00010004L,
      0x00000000L, 0x00000404L, 0x00010404L, 0x01000000L,
      0x00010000L, 0x01010404L, 0x00000004L, 0x01010000L,
      0x01010400L, 0x01000000L, 0x01000000L, 0x00000400L,
      0x01010004L, 0x00010000L, 0x00010400L, 0x01000004L,
      0x00000400L, 0x00000004L, 0x01000404L, 0x00010404L,
      0x01010404L, 0x00010004L, 0x01010000L, 0x01000404L,
      0x01000004L, 0x00000404L, 0x00010404L, 0x01010400L,
      0x00000404L, 0x01000400L, 0x01000400L, 0x00000000L,
      0x00010004L, 0x00010400L, 0x00000000L, 0x01010004L};
 
static unsigned long SP2[64]={
      0x80108020L, 0x80008000L, 0x00008000L, 0x00108020L,
      0x00100000L, 0x00000020L, 0x80100020L, 0x80008020L,
      0x80000020L, 0x80108020L, 0x80108000L, 0x80000000L,
      0x80008000L, 0x00100000L, 0x00000020L, 0x80100020L,
      0x00108000L, 0x00100020L, 0x80008020L, 0x00000000L,
      0x80000000L, 0x00100020L, 0x80008020L, 0x80100000L,
      0x00100020L, 0x80000020L, 0x00000000L, 0x00108000L,
      0x00008020L, 0x80108000L, 0x80100000L, 0x00008020L,
      0x00000000L, 0x00108020L, 0x80100020L, 0x00100000L,
      0x80008020L, 0x80100000L, 0x80108000L, 0x00008000L,
      0x80100000L, 0x80008000L, 0x00000020L, 0x80108020L,
      0x00108020L, 0x00000020L, 0x00008000L, 0x80000000L,
      0x00008020L, 0x80108000L, 0x00100000L, 0x80000020L,
      0x00100020L, 0x80008020L, 0x80000020L, 0x00100020L,
      0x00108000L, 0x00000000L, 0x80008000L, 0x00008020L,
      0x80000000L, 0x80100020L, 0x80108020L, 0x00108000L};
 
static unsigned long SP3[64]={
      0x00000208L, 0x08020200L, 0x00000000L, 0x08020008L,
      0x08000200L, 0x00000000L, 0x00020208L, 0x08000200L,
      0x00020008L, 0x08000008L, 0x08000008L, 0x00020000L,
      0x08020208L, 0x00020008L, 0x08020000L, 0x00000208L,
      0x08000000L, 0x00000008L, 0x08020200L, 0x00000200L,
      0x00020200L, 0x08020000L, 0x08020008L, 0x00020208L,
      0x08000208L, 0x00020200L, 0x00020000L, 0x08000208L,
      0x00000008L, 0x08020208L, 0x00000200L, 0x08000000L,
      0x08020200L, 0x08000000L, 0x00020008L, 0x00000208L,
      0x00020000L, 0x08020200L, 0x08000200L, 0x00000000L,
      0x00000200L, 0x00020008L, 0x08020208L, 0x08000200L,
      0x08000008L, 0x00000200L, 0x00000000L, 0x08020008L,
      0x08000208L, 0x00020000L, 0x08000000L, 0x08020208L,
      0x00000008L, 0x00020208L, 0x00020200L, 0x08000008L,
      0x08020000L, 0x08000208L, 0x00000208L, 0x08020000L,
      0x00020208L, 0x00000008L, 0x08020008L, 0x00020200L};
 
static unsigned long SP4[64]={
      0x00000208L, 0x08020200L, 0x00000000L, 0x08020008L,
      0x08000200L, 0x00000000L, 0x00020208L, 0x08000200L,
      0x00020008L, 0x08000008L, 0x08000008L, 0x00020000L,
      0x08020208L, 0x00020008L, 0x08020000L, 0x00000208L,
      0x08000000L, 0x00000008L, 0x08020200L, 0x00000200L,
      0x00020200L, 0x08020000L, 0x08020008L, 0x00020208L,
      0x08000208L, 0x00020200L, 0x00020000L, 0x08000208L,
      0x00000008L, 0x08020208L, 0x00000200L, 0x08000000L,
      0x08020200L, 0x08000000L, 0x00020008L, 0x00000208L,
      0x00020000L, 0x08020200L, 0x08000200L, 0x00000000L,
      0x00000200L, 0x00020008L, 0x08020208L, 0x08000200L,
      0x08000008L, 0x00000200L, 0x00000000L, 0x08020008L,
      0x08000208L, 0x00020000L, 0x08000000L, 0x08020208L,
      0x00000008L, 0x00020208L, 0x00020200L, 0x08000008L,
      0x08020000L, 0x08000208L, 0x00000208L, 0x08020000L,
      0x00020208L, 0x00000008L, 0x08020008L, 0x00020200L};
 
static unsigned long SP5[64]={
      0x00000100L, 0x02080100L, 0x02080000L, 0x42000100L,
      0x00080000L, 0x00000100L, 0x40000000L, 0x02080000L,
      0x40080100L, 0x00080000L, 0x02000100L, 0x40080100L,
      0x42000100L, 0x42080000L, 0x00080100L, 0x40000000L,
      0x02000000L, 0x40080000L, 0x40080000L, 0x00000000L,
      0x40000100L, 0x42080100L, 0x42080100L, 0x02000100L,
      0x42080000L, 0x40000100L, 0x00000000L, 0x42000000L,
      0x02080100L, 0x02000000L, 0x42000000L, 0x00080100L,
      0x00080000L, 0x42000100L, 0x00000100L, 0x02000000L,
      0x40000000L, 0x02080000L, 0x42000100L, 0x40080100L,
      0x02000100L, 0x40000000L, 0x42080000L, 0x02080100L,
      0x40080100L, 0x00000100L, 0x02000000L, 0x42080000L,
      0x42080100L, 0x00080100L, 0x42000000L, 0x42080100L,
      0x02080000L, 0x00000000L, 0x40080000L, 0x42000000L,
      0x00080100L, 0x02000100L, 0x40000100L, 0x00080000L,
      0x00000000L, 0x40080000L, 0x02080100L, 0x40000100L};
 
static unsigned long SP6[64]={
      0x20000010L, 0x20400000L, 0x00004000L, 0x20404010L,
      0x20400000L, 0x00000010L, 0x20404010L, 0x00400000L,
      0x20004000L, 0x00404010L, 0x00400000L, 0x20000010L,
      0x00400010L, 0x20004000L, 0x20000000L, 0x00004010L,
      0x00000000L, 0x00400010L, 0x20004010L, 0x00004000L,
      0x00404000L, 0x20004010L, 0x00000010L, 0x20400010L,
      0x20400010L, 0x00000000L, 0x00404010L, 0x20404000L,
      0x00004010L, 0x00404000L, 0x20404000L, 0x20000000L,
      0x20004000L, 0x00000010L, 0x20400010L, 0x00404000L,
      0x20404010L, 0x00400000L, 0x00004010L, 0x20000010L,
      0x00400000L, 0x20004000L, 0x20000000L, 0x00004010L,
      0x20000010L, 0x20404010L, 0x00404000L, 0x20400000L,
      0x00404010L, 0x20404000L, 0x00000000L, 0x20400010L,
      0x00000010L, 0x00004000L, 0x20400000L, 0x00404010L,
      0x00004000L, 0x00400010L, 0x20004010L, 0x00000000L,
      0x20404000L, 0x20000000L, 0x00400010L, 0x20004010L};
 
static unsigned long SP7[64]={
      0x00200000L, 0x04200002L, 0x04000802L, 0x00000000L,
      0x00000800L, 0x04000802L, 0x00200802L, 0x04200800L,
      0x04200802L, 0x00200000L, 0x00000000L, 0x04000002L,
      0x00000002L, 0x04000000L, 0x04200002L, 0x00000802L,
      0x04000800L, 0x00200802L, 0x00200002L, 0x04000800L,
      0x04000002L, 0x04200000L, 0x04200800L, 0x00200002L,
      0x04200000L, 0x00000800L, 0x00000802L, 0x04200802L,
      0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L,
      0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L,
      0x04000802L, 0x04200002L, 0x04200002L, 0x00000002L,
      0x00200002L, 0x04000000L, 0x04000800L, 0x00200000L,
      0x04200800L, 0x00000802L, 0x00200802L, 0x04200800L,
      0x00000802L, 0x04000002L, 0x04200802L, 0x04200000L,
      0x00200800L, 0x00000000L, 0x00000002L, 0x04200802L,
      0x00000000L, 0x00200802L, 0x04200000L, 0x00000800L,
      0x04000002L, 0x04000800L, 0x00000800L, 0x00200002L,};
 
static unsigned long SP8[64]={
      0x10001040L, 0x00001000L, 0x00040000L, 0x10041040L,
      0x10000000L, 0x10001040L, 0x00000040L, 0x10000000L,
      0x00040040L, 0x10040000L, 0x10041040L, 0x00041000L,
      0x10041000L, 0x00041040L, 0x00001000L, 0x00000040L,
      0x10040000L, 0x10000040L, 0x10001000L, 0x00001040L,
      0x00041000L, 0x00040040L, 0x10040040L, 0x10041000L,
      0x00001040L, 0x00000000L, 0x00000000L, 0x10040040L,
      0x10000040L, 0x10001000L, 0x00041040L, 0x00040000L,
      0x00041040L, 0x00040000L, 0x10041000L, 0x00001000L,
      0x00000040L, 0x10040040L, 0x00001000L, 0x00041040L,
      0x10001000L, 0x00000040L, 0x10000040L, 0x10040000L,
      0x10040040L, 0x10000000L, 0x00040000L, 0x10001040L,
      0x00000000L, 0x10041040L, 0x00040040L, 0x10000040L,
      0x10040000L, 0x10001000L, 0x10001040L, 0x00000000L,
      0x10041040L, 0x00041000L, 0x00041000L, 0x00001040L,
      0x00001040L, 0x00040040L, 0x10000000L, 0x10041000L};
 
static void desfunc(block, keys)
register unsigned long *block, *keys;
{
      register unsigned long fval, work, right, left;
      registerint round;
 
      leftt = block[0];
      right = block[1];
 
      work = ((leftt>> 4) ^ right) & 0x0f0f0f0fL; 
      right ^= work;
      leftt ^= (work << 4);
      work = ((work >> 16) ^ right) & 0x0000ffffL; 
      right ^= work;
      leftt ^= (work << 16);
      work = ((leftt>> 2) ^ leftt) & 0x33333333L; 
      leftt ^= work;
      right ^= (work << 2);
      work = ((right >> 8) ^ leftt) & 0x00ff00ffL; 
      leftt ^= work;
      right ^= (work << 8);
      right = ((right << 1) | ((right >> 31) & 1L)) & 0xffffffffL;
      work = (left ^ right) & 0xaaaaaaaaL;
      leftt ^= work; 
      right ^= work;
      leftt = ((leftt<< 1) | ((leftt<< 31) & 1L)) & 0xffffffffL;
 
      for( round = 0; round < 8; roud++ ) {
            work = (right << 28) | (right >> 4); 
            work ^= *keys++;
            fval = SP7[ work                   & 0x3fL];
            fval |= SP5[(work >> 8) & 0x3fL];
            fval |= SP3[(work >> 16) & 0x3fL]; 
            fval |= SP1[(work >> 24) & 0x3fL]; 
            work = right ^ *keys++;
            fval = SP8[ work                   & 0x3fL];
            fval |= SP6[(work >> 8) & 0x3fL];
            fval |= SP4[(work >> 16) & 0x3fL]; 
            fval |= SP2[(work >> 24) & 0x3fL]; 
            leftt ^= fval;
            work = (leftt<< 28) | (leftt>> 4); 
            work ^= *keys++;
            fval = SP7[ work                    & 0x3fL];
            fval |= SP5[(work >> 8) & 0x3fL];
            fval |= SP3[(work >> 16) & 0x3fL]; 
            fval |= SP1[(work >> 24) & 0x3fL]; 
            work ^= leftt ^ *keys++;
            fval = SP8[ work                     & 0x3fL];
            fval |= SP6[(work >> 8) & 0x3fL];
            fval |= SP4[(work >> 16) & 0x3fL]; 
            fval |= SP2[(work >> 24) & 0x3fL]; 
            right ^= fval;
            }
            right = (right << 31) | (right >> 1); 
            work = (leftt ^ right) & 0xaaaaaaaaL; 
            leftt ^= work;
            right ^= work;
            left = (leftt<< 31) | (leftt>> 1);
            work = ((leftt>> 8) ^ right) & 0x00ff00ffL; 
            right ^= work;
            leftt ^= (work << 8);
            work = ((leftt>> 2) ^ right) & 0x33333333L; 
            right ^= work;
            leftt ^= (work << 2);
            work = ((right >> 16) ^ leftt) & 0x0000ffffL; 
            leftt ^= work;
            right ^= (work << 16);
            work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL; 
            leftt ^= work;
            right ^= (work << 4);
 
            *block++ = right;
            *block = leftt;
            return;
      }
 
      /* Validation sets:
      *
      * Single-length key, single- length plaintext –
      * Key    : 0123 4567 89ab cdef
      * Plain : 0123 4567 89ab cde7
      * Cipher : c957 4425 6a5e d31d
      *
*****************************************************************/
      voiddes_key(des_ctx *dc, unsigned char *key){
            deskey(key,EN0); 
            cpkey(dc->ek);
            deskey(key,DE1); 
            cpkey(dc->dk);
      }
 
      /* Encript several bloks in ECB mode. Caller is responsible for short blocks. */
      voiddes_enc(des_ctx *dc, unsigned char *data, int blocks){ 
            unsigned longwork[2];
            inti;
            unsigned char *cp;
 
            cp = data; 
            for(i=0;i<blocks;i++){
                        scrunch(cp,work); 
                        desfunc(work,dc->ek); 
                        unscrun(work,cp); 
                        cp+=8;
            }
      }
 
      voiddes_dec(des_ctx *dc, unsigned char *data, int blocks){
            unsigned long work[2];
            inti;
            unsigned char *cp;
 
                        cp = data;
                        for(i=0;i<blocks;i++){
                        scrunch(cp,work); 
                        desfunc(work,dc->ek); 
                        unscrun(work,cp); 
                        cp+=8;
            }
      }
 
      voiddes_dec(des_ctx *dc, unsigned char *, intblokcs){
            unsigned long work[2];
            inti;
            unsigned char *cp;
 
                        cp = data; 
                        for(i=0;i<blocks;i++){
                        scrunch(cp,work); 
                        desfunc(work,dc->ek); 
                        unscrun(work,cp); 
                        cp+=8;
            }
      }
      void main(void){
            des_ctx dc; 
            int ;
            unsigned long data[10];
            char *cp,key[8] = {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef};
            char x[8] = {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xe7};
 
            cp = x; 
            des_key(&dc,key);
            des_enc(&dc,cp,1);
printf(“Enc(0..7,0..7) =);
for(i=0;i<8;i++) printf(%02x “, ((unsigned int) cp[i])&0x00ff); 
            printf(“\n”);
des_dec(&dc,cp,1);
 
            printf(“Dec(above,0..7) =);
            for(i=0;i<8;i++) printf(%02x “, ((unsigned int) cp[i])&0x00ff);
printf(“\n”);
 
            cp = (char *) data;
            for(i=0;i<10;i++)data[i]=I;
 
            des_enc(&dc,cp,5); /* Enc 5 blocks. */
            for(i=0;i<10;i+=2) printf(“Block %01d = %081x %081x.\n”, i/2,data[i],data[i+1]);
 
des_dec(&dc,cp,1);
            des_dec(&dc,cp+8,4);
            for(i=0;i<10;i+=2) printf(“Block %01d = %081x %081x.\n”, i/2,data[i],data[i+1]);
 
}
При запуске данной программы использовать парольную аутентификацию. В качестве пароля для запуска программы использовать слово длиной до 16 символов. В файл паролей записать результат выполнения функции (в соответствии с вариантом) над исходным паролем. Включить в программу защиты следующее условие: после трех неверных попыток введения пароля закрыть выполняемую программу и зафиксировать попытку входа в систему в журнале безопасности (текстовый файл, в котором фиксируется для неудачной попытки дата и время).
В качестве результата использовать следующую функцию:

https://www.cyberforum.ru/cgi-bin/latex.cgi?f:q* {X1}^{n} + g * {X2}^{n}

,
где n – количество вводимых символов;
q, g - случайное число в интервале от 1 до 100;
X1 – левая половина пароля (сумма ASCII-кодов всех символов в левой части);
X2 – правая половина пароля (сумма ASCII-кодов всех символов в правой части).
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.11.2023, 17:11
Ответы с готовыми решениями:

Написать программу светофор
Нужно написать программу светофор .Надо применить библиотеку graphics.h . Суть: 1) Выводится...

Разработать алгоритм и тесты, написать и отладить программу Выполнить программу, проанализировать результат
Из матрицы У(k, k) получить вектор Т, элементами которого являются элементы главной диагонали...

Отладить программу
class position { protected: int x, y; public: void setcoord(int _x, int _y) { x = _x; y =...

Отладить программу
Помогите пожалуйста #include &lt;iostream&gt; class Matrix { int i,j; float m,k; public:...

2
Злостный нарушитель
9682 / 5243 / 1197
Регистрация: 12.03.2015
Сообщений: 24,709
01.11.2023, 17:56 2
Ну нихрена себе полотенце!



Кто-нить осилил? Я - неть.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2023, 20:33 3
Да там шифрование DES по-видимому. Непонятно только, зачем оно нужно для задания.
0
01.11.2023, 20:33
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2023, 20:33
Помогаю со студенческими работами здесь

Отладить программу
bool prost (int k) { bool pr=true; for (int i=2;i&lt;=k-1;i++) if (k%i==0) pr= false; return pr; }...

отладить программу
программа компилируется,но выводит какие то иероглифы,помогите найти ошибки #include&lt;assert.h&gt;...

Отладить программу
Прошу отладить программу, находящуюся в прикладываемом архиве, чтобы не было ошибок &quot;Куча была...

Отладить программу
У нас дан однонаправленный список, добавили кнопку удаления последнего элемента. Работает по...

Отладить программу с функциями
Здравствуйте, помогите отладить программу, на строках 48 и 50 выдает ошибку: аргумент типа &quot;const...

немогу отладить программу
#include &lt;iostream.h&gt; #include &lt;vcl.h&gt; #pragma hdrstop #pragma argsused int Gh = 0 , Gv = 0 ,Ch...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Что такое хорошо и что такое плохо, вид сбоку. Индивид и общество - грань не нарушения.
Hrethgir 18.01.2025
В моей личной жизни и времени, я рассуждаю категорией "хуже-лучше", в том плане, когда меня спросили например - "а зачем ты делаешь свой процессор?", то я ответил - "чтобы сделать свою жизнь лучше". . .
Передача по ссылке или по значению в Java?
InfoMaster 18.01.2025
В мире программирования на Java одним из ключевых аспектов, требующих глубокого понимания, является механизм передачи параметров в методы. Этот фундаментальный концепт часто становится источником. . .
Тернарный условный оператор в Python
InfoMaster 18.01.2025
В мире программирования существует множество инструментов и конструкций, позволяющих создавать эффективный и лаконичный код. Одним из таких инструментов является тернарный условный оператор, который. . .
Как удалить неотслеживаемые файлы из рабочего дерева Git
InfoMaster 18.01.2025
В процессе разработки программного обеспечения с использованием системы контроля версий Git часто возникает необходимость в управлении неотслеживаемыми файлами. Неотслеживаемые файлы (untracked. . .
Что делает код if __name__ == "__main__": в Python
InfoMaster 18.01.2025
В мире программирования на Python существует множество важных концепций, и одной из наиболее интересных является конструкция if __name__ == "__main__". Эта специальная конструкция играет ключевую. . .
Как заставить Git забыть об отслеживаемом файле, добавленном в .gitignore
InfoMaster 18.01.2025
В мире разработки программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, позволяя эффективно отслеживать изменения в коде и управлять ими. Однако. . .
Что означает use strict в JavaScript и для чего используется
InfoMaster 18.01.2025
В мире современной веб-разработки JavaScript играет ключевую роль как один из основных языков программирования. По мере его эволюции возникла необходимость в механизмах, которые помогли бы. . .
Как работать со скрытыми (hidden) элементами в jQuery
InfoMaster 18.01.2025
В современной веб-разработке управление видимостью элементов на странице является одним из ключевых аспектов создания интерактивных пользовательских интерфейсов. jQuery предоставляет мощный набор. . .
Как переключаться между ветками (Branch) с помощью checkout в Git
InfoMaster 18.01.2025
Ветки в Git являются одной из ключевых концепций для управления версионностью кода, позволяя разработчикам эффективно работать в команде и параллельно развивать программные проекты. Каждый новый. . .
Что такое стек и куча, чем они отличаются и где находятся
InfoMaster 18.01.2025
Понимание основных концепций памяти в программировании В мире современного программирования эффективное управление памятью играет ключевую роль в создании производительных и надежных приложений. . . .
Как использовать комментарии в JSON
InfoMaster 18.01.2025
JSON (JavaScript Object Notation) представляет собой легкий и широко используемый формат обмена данными, который стал стандартом де-факто для веб-приложений и программных интерфейсов. При работе с. . .
Как заставить git pull перезаписать локальные файлы в Git
InfoMaster 18.01.2025
Проблема перезаписи локальных файлов в Git При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо синхронизировать локальный репозиторий с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru