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

Тема в разделе "C/C++/C#", создана пользователем Poloz, 14 июн 2010.

Статус темы:
Закрыта.
  1. Poloz

    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
     
  2. DarkDaiver

    DarkDaiver Гость

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

    Magyc Гость

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

    STyDeHT Гость

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

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    Закрываю этот бардак

    *Добавлено DarkKnight: Полностью согласен про бордак, такого еще не видел... Но автор первоначального сообщение все же не виноват за то что кто-то что-попало устроил... Так что его основную тему перенес
     
Загрузка...
Похожие Темы - Мусор Курсовая работа
  1. ДокторТуамОсес2
    Ответов:
    4
    Просмотров:
    3.007
  2. vincent_vega
    Ответов:
    17
    Просмотров:
    3.454
  3. vladis222
    Ответов:
    11
    Просмотров:
    3.654
Статус темы:
Закрыта.

Поделиться этой страницей