• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Мусор: Курсовая работа по С++(vb)

  • Автор темы Poloz
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

Poloz

Здравствуйте. Очень нужна помощь в написании курсовой работы на тему "Расчет S-блоков алгоритма ГОСТ 28147-89"
1. алгоритмом ГОСТ зашифровано сообщение (с помощью определенного S-блока). у нас есть только само это сообщение вида
2115959972 1097468422
926583362 511606919
2540269021 462145303
3944088823 962858646
1378309145 185548767
184384886 723230571
758674860 153732082
235924252 3413274775
2101168336 4091192498
1604482021 1434320407

Задача - по данному шифрованному тексту нужно вычислить s-блок которым было зашифровано сообщение. Результат - S-блок.

Существует алгоритм криптоанализа:
1. Берется очередной блок замены, на вход которого поступает n бит.
2. В таблице анализа для данного блока замены все исходные значения полагаются равными 0.
3. Определяется первое возможное значение входной разности ∆А=0.
4. Определяется значение первого входа Х=0 в анализируемый S-блок.
5. Вычисляется второе значение входа Х’ = Х % ∆А.
6. Для входов Х и Х’ в соответствии с принципом работы S-блока определяются соответственно выходы Y и Y’.
7. Вычисляется значение выходной разности ∆С = Y % Y’.
8. В таблице анализа увеличивается на 1 значение, стоящее на пересечении строки с номером ∆А и столбца с номером ∆С.
9. Значение Х увеличивается на 1.
10. Если Х<2n, то происходит переход к пункту 5.
11. Значение ∆А увеличивается на 1.
12. Если ∆А < 2n, то происходит переход к пункту 4.
13. Если не все блоки замены проанализированы, то происходит переход к пункту 1, иначе алгоритм заканчивает свою работу.

я уже давно бъюсь с кодом.. вот какой он у меня

C++:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <windows.h>
#include <math.h>
#include <fstream>

/* Для использования потокового ввода/вывода */
using namespace std;

/* Чтобы не писать каждый раз unsigned int переименовываем в word32 */
typedef unsigned int word32;
word32 RaznA;
word32 RaznC;
int n;
word32 x, x1, y, y2;
word32 in[2];

// таблица анализа блока замены (равна нулю)
static unsigned char analiz [8][16] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};



void s_box (word32 const in[2])
{	//файл в который будет записан результат поиска значений S-блока
FILE *s;
s = fopen ("s_box.txt","w");
//файл только для чтения. в нем хранится зашифрованное сообщение
FILE *f;
f = fopen ("input.txt", "r");



/* таблица анализа блока замены (равна нулю)
static unsigned char analiz [8][16] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};*/


for (int count = 1; count < 129; count++) 
{	
/*построчное считывание в переменную stroka из файла с зашифрованными сообщениями*/
char ciphertext[22];
char *stroka;
FILE *input;
stroka = fgets(ciphertext, 22, f);
register word32 n1, n2;
n1 = in [0];	/* Младшая часть */
n2 = in [1];	/* Старшая часть */

// ?А.
RaznA = 0;

//Если ?А < 2n, то происходит переход к пункту 4.
for (RaznA = 0; RaznA < pow((double)2,n);RaznA++)
{
{
x = 0;
y = analiz [7][x >> 28 & 15] << 28 | 
analiz [6][x >> 24 & 15] << 24 |
analiz [5][x >> 20 & 15] << 20 | 
analiz [4][x >> 16 & 15] << 16 |
analiz [3][x >> 12 & 15] << 12 | 
analiz [2][x >> 8 & 15] << 8 |
analiz [1][x >> 4 & 15] << 4 | 
analiz [0][x	  & 15];
}
//Если Х<2n, то происходит переход к пункту 5.
for (x = 0; x < pow((double)2,n); x++)
{
x1= x % RaznA;
y2 = analiz [7][x1 >> 28 & 15] << 28 | 
analiz [6][x1 >> 24 & 15] << 24 |
analiz [5][x1 >> 20 & 15] << 20 | 
analiz [4][x1 >> 16 & 15] << 16 |
analiz [3][x1 >> 12 & 15] << 12 | 
analiz [2][x1 >> 8 & 15] << 8 |
analiz [1][x1 >> 4 & 15] << 4 | 
analiz [0][x1	  & 15];

RaznC = y % y2;

//В таблице анализа увеличивается на 1 значение, стоящее на пересечении
//строки с номером ?А и столбца с номером ?С.
analiz [RaznA][RaznC]+=1;
x = x + 1;

}
}

}
//вывод результата в файл

//fprintf (s, "%d", analiz[8][16]);

}

void main ()
{



int i=1;
FILE *input;
input = fopen("input.txt","a");
for(i=1;i<9;i++)
{
static unsigned char temp [8][2];
}	char sentence[25];
fgets(sentence,25,stdin);
s_box();
FILE *s;
s=fopen("s_box.txt","a");
fputs(sentence,s);
return 0;
}

мой код не работает..не считывает файл.
input.txt - это файл в котором хранится зашифрованное сообщение, а s_box.txt - это файл в который нужно записать результат.
Должен получиться S-блок вот такой вот
4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15, 5, 3,
14, 11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7, 5, 9,
5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11,
7, 13, 10, 1, 0, 8, 9, 15, 14, 4, 6, 12, 11, 2, 5, 3,
6, 12, 7, 1, 5, 15, 13, 8, 4, 10, 9, 14, 0, 3, 11, 2,
4, 11, 10, 0, 7, 2, 1, 13, 3, 6, 8, 5, 9, 12, 15, 14,
13, 11, 4, 1, 3, 15, 5, 9, 0, 10, 14, 7, 6, 8, 2, 12,
1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12
 
D

DarkDaiver

могу сделать тебе эту курсовую
пиши
ISQ: 412842920
Mail: darkdaiver777@gmail.com
skype: hrusloff
 
M

Magyc

Здравствуйте! нужна помощь в написании программы, которая подменяет сообщения при отправке!
Например я отправляю сообщение, оно доходит до получателя, но не от моего имени а от другого...
ISQ: 493689252
Нужно срочно. Оплата
 
S

STyDeHT

Добрый день всем, пожалуйсто, помгоите, кто может конечно, с написанием курсовой работы, у меня она такова - нужно сделать игру "Палочки" на языке С, игра для 2-х людей, смысл - на экран выводится 15-20 палочек( можно написать cout<<"\n";) затем игроки тянут по 1-3 палочки, проигрывает тот кто тянит последнюю. Если кто может пишите- звоните(http://vkontakte.ru/id79439476 skype: a3a3ejl)
 
A

acorn

Закрываю этот бардак

*Добавлено DarkKnight: Полностью согласен про бордак, такого еще не видел... Но автор первоначального сообщение все же не виноват за то что кто-то что-попало устроил... Так что его основную тему перенес
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!