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

Надо срочно доделать прогу - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить методом Симпсона http://www.cyberforum.ru/cpp-beginners/thread129299.html
Вычислить интеграл http://www.cyberforum.ru/attachment.php?attachmentid=29717&amp;d=1273752305 методом Симпсона. Не пойму этих формул... Добавлено через 34 минуты Это правильно? //--------------------------------------------------------------------------- #include <vcl.h> #include <conio.h> #include <stdio.h> //---------------------------------------------------------------------------
C++ Найти произведение Найти произведение главной диагонали матрицы, помогите с задачкой пожалуйста)) http://www.cyberforum.ru/cpp-beginners/thread129279.html
Треугольник C++
помогите!
C++ функция
помогите решить!
C++ Работа со ссылками http://www.cyberforum.ru/cpp-beginners/thread129254.html
Помогите кто-нибудь с этим заданием: переменной Z присвоить значение наибольшего из элементов матрицы {ai,j}4,4, расположенные выше главной диагонали. Заранее благодарен.
C++ Работа с файлами Всем добрый день. Помогите кто-нибудь с этим заданием: о каждом из студентов известны фамилия и информация о том, имеет ли студент зачет по каждому из 6 предметов. Отпечатать фамилии студентов, не имеющих зачета более чем по 2 предметам. Сам файл создать нужно самостоятельно, и с него информацию брать для создания нового файла. Только на С++ программу делать, не на С. Заранее очень и очень... подробнее

Показать сообщение отдельно
CrazyBanja
Сообщений: n/a
13.05.2010, 19:52     Надо срочно доделать прогу
Проблема в том что прога работает только шифрует первые 8 символов. А остальные не берет. Кто шарит глянье где ошибка. Это реализация ГОСТ 28147-89
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
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include<math.h>
#include<iostream>
 
using namespace std;
//---------------------------------------------------------------------------
// взято из хелпа, определяем размер файла
long filesize(FILE *stream)
{
 long curpos, length;
 curpos = ftell(stream);
 fseek(stream, 0L, SEEK_END);
 length = ftell(stream);
 fseek(stream, curpos, SEEK_SET);
 return length;
}
// функция, реализующая работу ГОСТ 28147-89 в режиме простой замены
void rpz(int rezh, char* opener, char* saver)
{
 FILE *f_begin, *f_end; // потоки для исходного и конечного файлов
 // таблица замен
 unsigned char Tab_Z[8][16] =
 {
  0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF,
  0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF,
  0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF,
  0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF,
  0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF,
  0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF,
  0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF,
  0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF,
 };
// ключик
 unsigned long key[8] =
 {
  0x0123,
  0x4567,
  0x89AB,
  0xCDEF,
  0x0123,
  0x4567,
  0x89AB,
  0xCDEF,
 };
 
 char N[4]; // 32-разрядный накопитель,
 unsigned long n1=0, n2=0, SUM232=0; // накопители N1, N2, и сумматор
 // открываем файлы
 f_begin = fopen (opener,"rb");
 f_end = fopen (saver,"wb");
 // определим количество блоков
 float blokoff;
 blokoff=8*filesize(f_begin);
 blokoff = blokoff/64;
 int block = blokoff;
 if (blokoff-block>0) block++;
 int sh;
 if (filesize(f_begin)>=4) sh = 4; else sh = filesize(f_begin);
 int sh1 = 0;
 int flag=0;
 // начнем считывание и преобразование блоков
 // присутствуют проверки на полноту блоков, чтобы считать только нужное количество бит
 for (int i=0; i<block; i++)
 {
  // записываем в накопитель N1
  for (int q1=0; q1<4; q1++) *((unsigned char *)&N+q1) = 0x00;
 
  if ((sh1+sh)<filesize(f_begin))
  {
   fread (N,sh,1,f_begin);
   sh1+=sh;
  }
  else
  {
   sh=filesize(f_begin)-sh1;
   fread (N,sh,1,f_begin);
   flag=1;
  }
  n1 = *((unsigned long *)&N);
 
  // записываем в накопитель N2
  for (int q2=0; q2<4; q2++) *((unsigned char *)&N+q2) = 0x00;
 // memset(N,0,sizeof(N));
  if ((sh1+sh)<filesize(f_begin))
  {
   fread (N,sh,1,f_begin);
   sh1+=sh;
  }
  else
  {
   if (flag==0)
   {
    sh=filesize(f_begin)-sh1;
    fread (N,sh,1,f_begin);
   } 
  }
  n2 = *((unsigned long *)&N);
 
  // 32 цикла простой замены
  // ключ считываем в требуемом ГОСТом порядке
  int c = 0;
  for (int k=0; k<32; k++)
  {
   if (rezh==1) { if (k==24) c = 7; }
    else { if (k==8) c = 7; }
 
   // суммируем в сумматоре СМ1
   SUM232 = key[c] + n1;
 
   // заменяем по таблице замен
   unsigned char first_byte=0,second_byte=0,zam_symbol=0;
   int n = 7;
   for (int a=3; a>=0; a--)
   {
    zam_symbol = *((unsigned char *)&SUM232+a);
    first_byte = (zam_symbol & 0xF0) >> 4;
    second_byte = (zam_symbol & 0x0F);
    first_byte = Tab_Z[n][first_byte];
    n--;
    second_byte = Tab_Z[n][second_byte];
    n--;
    zam_symbol = (first_byte << 4) | second_byte;
    *((unsigned char *)&SUM232+a) = zam_symbol;
   } 
   
   SUM232 = (SUM232<<11)|(SUM232>>21); // циклический сдвиг на 11
   SUM232 = n2^SUM232; // складываем в сумматоре СМ2
 
   if (k<31)
   {
    n2 = n1;
    n1 = SUM232;
   }
   if (rezh==1)
   {
    if (k<24)
    {
     c++;
     if (c>7) c = 0;
    }
    else
    {
     c--;
     if (c<0) c = 7;
    }
   }
   else
   {
    if (k<8)
    {
     c++;
     if (c>7) c = 0;
    }
   else
   {
    c--;
    if (c<0) c = 7;
   }
  }
 }
 n2 = SUM232;
 
 // вывод результата в файл
  char sym_rez;
  for (int q3=0; q3<=3; q3++)
  {
   sym_rez = *((unsigned char *)&n1+q3);
   fprintf(f_end, "%c", sym_rez);
  }
  for (int q4=0; q4<=3; q4++)
  {
   sym_rez = *((unsigned char *)&n2+q4);
   fprintf(f_end, "%c", sym_rez);
  }
 }
 fclose (f_begin);
 fclose (f_end);
}
//---------------------------------------------------------------------------
int main()
{
 // выбираем шифрование или расшифрование
 int rezhim = 0;
 do
 {
  printf("Vuberite rejum rabotu:\nShufrovanie - 1\nRasshufrovanie - 2\n");
   scanf("%d", &rezhim);
 } while ((rezhim!=1)&&(rezhim!=2)); // повторяем до тех пор, пока не будет введено 1 или 
 
 // выбираем исходный и конечный файлы (слэш '\' в пути писать как '\\') 
 char open_str[50], save_str[50];
 printf("\nVvedite adres faila\n");
 scanf("%s", &open_str);
 printf("\nVvedite imja zashufrovanogo faila\n");
 scanf("%s", &save_str);
 
 rpz(rezhim, open_str, save_str); // запускаем РПЗ
 return 0;
}
//------------------------------------------------------------------------
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru