Форум программистов, компьютерный форум, киберфорум
Криптография
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 24.01.2019
Сообщений: 4

Определении типа алгоритма шифрования/дешифрования

24.01.2019, 20:32. Показов 1626. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день
Нужен коллективный разум в определении типа алгоритма шифрования/дешифрования.
Занимаюсь изучением программы. Программа при определенных действиях обменивается данными с сервером, после чего программа отказывается работать с нашими данными. Нашел место в программе, где начинаются проверки данных, после которых возникает проблема.
Что происходит в общих чертах.
1. Из разных мест программы и данных поступивших от сервера собирается исходный блок данных(ИБД). На момент начала проверки размер ИБД может быть разный, но не меньше 256 байт.
2. Для блока ИБД рассчитывается хеш (MD5)
3.С конца блока ИБД копируем 32 двойных слова, 80 байт.
4.Копируем 32 двойных слова в два разных массива arr1 и arr2
4. Выделяем массив размером 256 байт И начинаем в цикле его заполнять.
Если выбросить все лишнее то алгоритм заполнения массива можно представить в виде следующего кода.
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
uint32 out[64];
uint32 arr1[] ={0x09AA4155, …………, 0x00120EF44}; //32 uint32 
uint32 arr2[] ={0x09AA4155, …………, 0x00120EF44}; //32 uint32 
uint32 var34, var38;
 
for(int i=0; i<32; i++)
{
  r31 =0;
  for(int j=0; j<32; j++)
  {
     KniftData(arr1[i], arr2[j], &var34, &var38);//хитрый алгоритм перемешивания 2-х чисел
      t = Out[ j+ iindex];
      r4 =res_sum= t+ r31;
     out[ j+ iindex] = res_sum;
     if(res_sum < r31) r31 =1; else r31 = 0;
      r4 +=var38;
       out[ j+ iindex] = r4;
       r0 = ~r4 + var38+1;
       r31 = (uint32)(-(sint32)r0);
       r31+=var34;
  }
   iindex++;
   out[32] = out[32] +r31;
}
 
void KniftData(var1, var2, *var34, *var38)
{
   var9 = var1 & 0x0000FFFF;
   var3 = (var1 & 0xFFFF0000)>>16;
   var7 = var2 & 0x0000FFFF;
   var11 = (var2 & 0xFFFF0000)>>16;
   var10 = var9*var7;
   var12 = var3*var11;
   *var38 = var10
   var9  *= var11;
   *var34 = var12;
   var3 *=var7;
   var3 +=var9;
   If(var3<var9) var8=1;
   var9 = (var3 & 0x0000FFFF)<<16;
   var7 = (var3 & 0x0000FFFF)>>16;
   var3= var9+ *var38;
   *var38 = var3;
 
   var0 =~var9+var3+1;
   var0=~var8
   var8=(uint32)(-(sign32)var0);
   var12 = var8+8var34;
  *var34=var12+var7;
}
За код сильно не пинайте, это так наброски.

5. С этим массивом что то делают. Функции работы с массивом out еще не разобрал. В функциях много действий не относящихся шифровке/дешифровке данных.

На основании изученных данных и анализу кода прихожу к мнению, что это данные защищены электронной подписью. Сами данные не кодируются.
Вопрос - на основании представленного кода, какой алгоритм использовался для кодирования?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.01.2019, 20:32
Ответы с готовыми решениями:

Реализовать программный модуль шифрования и дешифрования текстовых файлов в соответствии с алгоритом шифрования и ключом
Реализовать программный модуль шифрования и дешифрования текстовых файлов в соответствии с данным алгоритмом шифрования и ключом Метод...

Аддитивный метод шифрования\дешифрования.
Приветствую всех. У меня такая темы курсовой &quot;Разработка аддитивный алгоритмов криптографического шифрования и дешифрования&quot;...

Оцените алгоритм шифрования-дешифрования
не уверен куда данную тему создать. К какому типу относится и насколько сложно дешифровать такого рода шифр (текстовое сообщение)...

3
653 / 161 / 64
Регистрация: 08.04.2015
Сообщений: 411
25.01.2019, 09:05
Цитата Сообщение от wilibear Посмотреть сообщение
За код сильно не пинайте, это так наброски.
Уж очень черновые наброски. К примеру, зачем нужна эта строка:
C
1
var7 = (var3 & 0x0000FFFF)>>16;
Очевидно же, в результате всегда будет var7=0.
Или, зачем первая строка в этой паре:
C
1
2
var0 = ~var9+var3+1;
var0 = ~var8;
Подозреваю, при переходе от ассемблера к ЯВУ у вас могли появиться ошибки.


Цитата Сообщение от wilibear Посмотреть сообщение
Вопрос - на основании представленного кода, какой алгоритм использовался для кодирования?
Из распространённых алгоритмов ни на что не похоже.

Исправил опечатки (в меру своего понимания), скомпилировал, посмотрел в работе. Получилось не кодирование, а какое-то необратимое преобразование. Например, для var1=1 и var2=2 на выходе KniftData() имеем var34=1 и var38=2, и такой же результат будет для var1=2 и var2=1.
0
0 / 0 / 0
Регистрация: 24.01.2019
Сообщений: 4
04.03.2019, 16:42  [ТС]
Добрый день

Попробую еще раз реанимировать данный топик.
На несколько недель плотно засел за разбор кода.
Можно сказать, что весь интересующий меня алгоритм можно разбить на 4-е части.
Часть 1. Подготовка данных. Что и откуда берется(что приходит от сервера а что берется из файлов) и как складывается разобрался.
Часть 2 Подготовка данных необходимых для шифрования и дешифрования.
Приведу полный фрагмент кода который на основании константных значений 32 word-а формируем массив из 64 word-ов.
Который используется в программе для шифрования/дешифрования данных
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
bool isCarry(uint32 a, uint32 b, uint32 c)
{
    if ((a+b) < a)      return true;    
    if ((a+b+c) < c)    return true;
    return false;
}
 
 
void Knead_Value(uint32 var1, uint32 var2, uint32 *var34, uint32 *var38)
{
    uint32 r9 =  var1 & 0x0000FFFF;
    uint32 r3 =  var1 >>16;
 
    uint32 r7 =  var2 & 0x0000FFFF;
    uint32 r11 =  var2 >>16;
 
    uint32 r10 = r9 * r7;
    uint32 r12 = r3 * r11;
 
    *var38 = r10;
 
    r9 = r9*r11;
    *var34 = r12;
    r3 = r3*r7;
    r3=r9+r3;
    uint32 r8=0;
 
    if(r3 < r9) r8=0x10000;
 
    r9 = r3 << 16;
    r7 = r3 >> 16;
 
    r3 = r9 + *var38;
    *var38 =  r3;
 
    uint32 fcarry=0;
    uint32 r0;
 
    if (isCarry(~r9, r3, 1)) fcarry = 1;else    fcarry = 0; 
 
    r0 = ~r8 + fcarry;
    r8 = (uint32)(-(sint32)r0); 
    r12 = r8 + *var34;
    r12 = r12+r7;
    *var34 =r12;
 
}
 
 
int Testing_Arr_Item_0(uint32 *var228_1, int count)
{
    if( count != 0 )
    {
        for(int i = count-1; i>=0; i--)
        {
            if ( var228_1[i] != 0) return i;
        }
    }
 
    return -1;
}
 
void sub_759C( uint32 *var118_Arr/*r3*/, uint32 *var1B8_Arr/*r4*/, uint32 *var228_Arr/*r5*/, int count/*r6*/)
{
     uint32 r22=0, r26=0;
 
     uint32 var34 = 0;
     uint32 var38 = 0;
     
     uint32 r4=0;
     uint32 fcarry=0;
 
     uint32 r31 =0;
 
     memset(var118_Arr, 0, (count*2)*sizeof(uint32));
 
     r22 = Testing_Arr_Item_0(var1B8_Arr, count);
 
     r26 = Testing_Arr_Item_0(var228_Arr, count);
 
     if(r22 == -1) return;   
     
     uint32 r29 =0;
 
    for(int i=0; i<=r22; i++)
    {
         r31 =0;
 
        uint32 r11 = var1B8_Arr[i]; 
 
        if(r11 !=0 && r26!=-1)
        {           
 
             for(int j=0; j<=r26; j++)
             {
                 uint32 varr4 = var228_Arr[j]; 
                 uint32 varr3 = var1B8_Arr[i]; 
 
                 Knead_Value( varr3,  varr4,  &var34,  &var38);
            
                 uint32 r12 = var118_Arr[j+i];
 
                 uint32 r3 = r31 + r12;
                 r4=r3;
                 
                 var118_Arr[j+i] = r3;
                 
                 if(r3 < r31) r31=1; else r31=0;
                 
                 r3 = var38;
                 
                 r4 = r4 + var38;               
                 
                 sint32 r0;
                 if (isCarry(~r3, r4, 1))  fcarry = 1;   else  fcarry = 0;
 
                 r0 = ~r31 + fcarry;
                 
                 var118_Arr[j+i] = r4;
                 
                 r31 = (uint32)(-(sint32)r0);
                 r31 = r31 + var34;
             }
 
        }//if
 
        uint32 r12 = var118_Arr[0x20+i];
        r12 = r31 + r12;
        var118_Arr[0x20+i] = r12;
 
    }
 
}
За код сильно не пинайте, это так наброски.
0
0 / 0 / 0
Регистрация: 24.01.2019
Сообщений: 4
16.03.2019, 12:17  [ТС]
Всем привет

Вообщем разобрался с кодом.

Knead_Value - Это умножение двух word. A sub_759C это умножение длинных чисел
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.03.2019, 12:17
Помогаю со студенческими работами здесь

Некорректно работает программа шифрования и дешифрования (ГОСТ 28147-89)
Прошу помочь с обнаружением и устранением ошибки(ошибок) в коде программы, реализующей шифрование и дешифрование текста на основе алгоритма...

Здраствуйте! Пожалуйста вы можете написать программу на С++ шифрования и дешифрования с методом
Здраствуйте! Пожалуйста вы можете написать программу на С++ шифрования и дешифрования с методом Магического квадрата размер 6*6. пожалуйста...

Не совсем понятен алгоритм шифрования/дешифрования шифра ГОСТ 28147-89
Подробный алгоритм в файле. Ключ для шифрования-K0K1K2K3K4K5K6K7K0K1K2K3K4K5K6K7K0K1K2K3K4K5K6K7K7K6K5K4K3K2K1K0 Дешифрования -...

Определение алгоритма(ов) шифрования
Добрый день, имеется зашифрованное сообщение, примерно такого вида: )#*Y#**#Y*((@&amp;%*&amp;@)%&amp; приблизительно 200 символов. Исходный...

Реализация алгоритма шифрования MQV
Всем доброго времени суток! Столкнулся с проблемой при реализации алгоритма шифрования MQV. Гуглинг, к сожалению, кроме ссылок на...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru