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

Метод шифрования Локи91 - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка односвязного списка (нужно редактирование) http://www.cyberforum.ru/cpp-beginners/thread562298.html
нужно вот что - Задание : Сортировка книг данного автора по полю год издания, то есть, вводишь автора, и он < кто ? />сортирует его книжки по полю год издания. Это курсовая, я все сделал, кроме сортировки (точнее, сортировку написал, но она не хочет работать). Вот код , большая просьба, скомпилируйте и посмотрите, и подредактируйте, что надо, чтобы сортировка работала. ( А то критическая...
C++ Нужна помощь с программой ПРограмма должна выполнять расчет коэффициентов характеристического полинома квадратной матрицы http://www.cyberforum.ru/cpp-beginners/thread562268.html
C++ Алгоритм нахождения ПРОСТЫХ чисел в файле
Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел. Из файла f получить файл g, оставив только ПРОСТЫЕ числа. Порядок следования чисел сохранить. При обрабоке файла не использовать массив простых чисел. Файл у меня формирует, а вот как определить яляется ли число простым вопрос не такой простой :( Вот мой код: #include<stdlib.h> #include<stdio.h> int main...
C++ Определить каких букв больше в строке: гласных или согласных и на сколько.
1)Ввести строку А с клавиатуры состоящую из заглавных русских букв. Определить каких букв больше: гласных или согласных и на сколько. Вывести все слова заканчивающиеся на букву "а". 2)Удалить все слова заканчивающиеся на "ия" из введенной строки. ПОЖАЛУЙСТА!!!
C++ Кнут - деление длинных чисел http://www.cyberforum.ru/cpp-beginners/thread562239.html
Нужна помощь в переводе алгоритма деления длинных чисел из книги: Д. Э. Кнут - Искусство Программирование Том 2 Получисленные Алгоритмы. Особенно интересен третий шаг, я никак не могу понять, что там имеется в виду. Мой код 4го шага: int q((static_cast<int>(num)*255+static_cast<int>(num))/v); int r((static_cast<int>(num)*255+static_cast<int>(num))%v); while(q!=255 ||...
C++ C++ Где закачать C++ для 64-разрядную Windows 7 подробнее

Показать сообщение отдельно
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
30.04.2012, 18:37     Метод шифрования Локи91
Дан код, нужно его подредактировать. У меня выдает какие то не понятные ошибки. Вроде все правильно но не работает(((

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
#include <stdio.h>
 
#define LOKIBLK 8
#define ROUNDS 16
typedef unsigned long Long;
extern Long lokikey[2];
extern char *loki_lib_ver;
 
#ifdef __STDC__
/* declare prototypes for library functions */
extern void enloki(char *b);
extern void deloki(char *b);
extern void setlokikey(char key[LOKIBLK]);
#else
/* else just declare library functions extern */
 
extern void enloki(), deloki(), setlokikey();
#endif __STDC__
char P[32] = {31, 23, 15, 7, 30, 22, 14, 6,
          9, 21, 13, 5, 28, 20, 12, 4,
          27, 19, 11, 3, 26, 18, 10, 2,
          25, 17, 9, 1, 24, 16, 8, 0};
typedef struct {
  short gen;
  short exp;
} sfn_desc;
 
sfn_desc sfn[] = {
          { /* 101110111 */ 375, 31}, {/* 101111011 */ 379, 31},
          { /* 110000111 */ 391, 31}, {/* 110001011 */ 395, 31},
          { /* 110001101 */ 397, 31}, {/* 110011111 */ 415, 31},
          { /* 110100011 */ 419, 31}, {/* 110101001 */ 425, 31},
          { /* 110110001 */ 433, 31}, {/* 110111101 */ 445, 31},
          { /* 111000011 */ 451, 31}, {/* 111001111 */ 463, 31},
          { /* 111010111 */ 471, 31}, {/*  111011101*/ 477, 31},
          { /* 111100111 */ 487, 31}, {/* 111110011 */ 499, 31},
          { 00, 00} 
     };
 
typedef struct {
  Long loki_subkeys[ROUNDS];
} loki_ctx;
 
static long f();
static short s();
 
#define ROL12(b) b = ((b << 12) | (b >> 20));
#define ROL13(b) b = ((b << 13) | (b >> 19));
 
#ifdef LITTLE_ENDIAN
#define bswap(cb) {
  register char  c;
  c = cb[0]; cb[0] = cb[3]; cb[3] = c;
  c = cb[1]; cb[1] = cb[2]; cb[2] = c;
  c = cb[4]; cb[4] = cb[7]; cb[7] = c;
  c = cb[5]; cb[5] = cb[6]; cb[6] = c;
}
#endif
 
void setlokikey(loki_ctx *c, char *key) {
  register int i;
  register Long KL, KR;
#ifdef LITTLE_ENDIAN
  bswap(key);
#endif
  KL = ((Long *)key)[0];
  KR = ((Long *)key)[1];
  for (i=0; i<ROUNDS; i+=4) {
    c->loki_subkeys[i] = KL;
    ROL12 (KL);
    c->loki_subkeys[i+1] = KL;
    ROL13 (KL);
    c->loki_subkeys[i+2] = KR;
    ROL12 (KR);
    c->loki_subkeys[i+3] = KR;
    ROL13 (KR);
  }
#ifdef LITTLE_ENDIAN
  bswap(key);
#endif
}
 
void enloki (loki_ctx *c, char *b) {
  register int i;
  register long L, R;
#ifdef LITTLE_ENDIAN
  bswap(b);
#endif
  L = ((Long *)b)[0];
  R = ((Long *)b)[1];
  
  for (int i=0; i<ROUNDS; i+=2) {
    L ^= f(R, c->loki_subkeys[i]);
    R ^= f(L, c->loki_subkeys[i+1]);
  }
  ((Long *)b)[0] = R;
  ((Long *)b)[1] = L;
#ifdef LITTLE_ENDIAN
  bswap(b);
#endif
}
 
void deloki(loki_ctx *c, char *b) {
  register int i;
  register long L, R;
#ifdef LITTLE_ENDIAN
  bswap(b);
#endif
  L = ((Long *)b)[0];
  R = ((Long *)b)[1];
  for (i=ROUNDS; i>0; i-=2) {
    L ^= f(R, c->loki_subkeys[i-1]);
    R ^= f(L, c->loki_subkeys[i-2]);
  }
  ((Long *)b)[0] = R;
  ((Long *)b)[1] = L;
}
 
#define MASK12 0x0fff
 
static long f(long r, long k){
    register long r; /* Data value R(i-1) */
    long k;      /* Key K(i) */
      long a, b, c; /* 32 bit S-box output, & P output */
      a = r ^ k; /* A = R(i-1) XOR K(i) */
      /* want to use slow speed/small size version */
      b = ((Long)s((a & MASK12)) ) | /* B = S(E(R(i-1))^K(i)) */
          ((Long)s(((a >> 8) & MASK12)) << 8) |
          ((Long)s(((a >> 16) & MASK12)) << 16) |
          ((Long)s((((a >> 24) | (a << 8)) & MASK12)) << 24);
      perm32(&c, &b, P);  /* C = P(S( E(R(i-1)) XOR K(i))) */
      return(c); /* f returns the result C */
}
 
static short s(long i){
  register long i; /* return S-box value for input i */
  register short r, c, v, t;
  short exp8(); /* exponentiation routine for GF(2^8) */
  r = ((i>>8) & 0xc) | (i & 0x3);
  c = (i>>2) & 0xff;
  t = (c + ((r * 17) ^ 0xff)) & 0xff;
  v = exp8(t, sfn[r].exp, sfn[r].gen);
return(v);
}
 
#define MSB 0x80000000L /* MSB of 32-bit word */
 
 void perm32(long* out, long* in, char* perm){
  long *out;    /* Output 32-bit block to be permuted */
  long *in; /* Input 32-bit block to be permuted */
  char perm[32];/* Permutation array */
 
  Long mask = MSB;
  register int i, o, b;
  register char *p = perm;
  *out = 0;
  for (o=0; o<32; o++) {
    i =(int)*p++;
    b = (*in >> i) & 01;
    if (b)
    *out |= mask;
    mask >>= 1;
  }
}
 
#define SIZE 256
 
short mult8(short a,short b,short gen){
    short a, b;
    short gen;
    short product = 0; /* result of multiplication */
    while(b != 0) {
        if (b & 01)
            product ^= a;
        a <<= 1; /* shift multiplicand one place */
        if (a >= SIZE)
            a ^= gen; /* and modulo reduce if needed */
        b >>= 1; /* shift multiplier one place */
    }
    return(product);
}
 
short exp8(short base, short exponent, short gen){
  short base;
  short exponent;
  short gen;
  short accum = base;/* superincreasing sequence of base */
  short result = 1;
  if (base == 0)
    return(0);
  while (exponent != 0) { /* repeat while exponent non-zero */
    if (( exponent & 0x0001) == 0x0001)
      result = mult8(result, accum, gen);
    exponent >>= 1;
    accum = mult8(accum, accum, gen);
  }
  return(result);
}
 
void loki_key(loki_ctx *c, unsigned char *key){
  setlokikey(c, key);
}
 
void loki_enc(loki_ctx *c, unsigned char *data, int blocks){
  unsigned char *cp;
  int i;
  cp = data;
  for(i=0;i<blocks;i++){
    enloki(c,cp);
    cp+=8;
  }
}
 
void loki_dec(loki_ctx *c, unsigned char *data, int blocks){
  unsigned char *cp;
  int i;
  cp = data;
  for(i=0;i<blocks;i++){
    deloki(c, cp);
    cp+=8;
  }
}
 
void main(void){
  loki_ctx lc;
  unsigned long data[10];
  unsigned char *cp; 
  unsigned char key[] = {0,1,2,3,4,5,6,7};
  int i;
  for(i=0;i<10;i++) 
    data[i]=i;
  
  loki_key(&lc,key);
  cp = (char*)data;
  loki_enc(&lc,cp,5);
  
  for(i=0;i<10;i+=2) 
    printf("Block %01d = %08lx %08lx\n",i/2,data[i],data[i+1]);
  
  loki_dec(&lc,cp,1);
  loki_dec(&lc,cp+8,4);
  
  for(i=0;i<10;i+=2) 
    printf("Block %01d = %08lx %08lx\n",i/2,data[i],data[i+1]);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru