Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/40: Рейтинг темы: голосов - 40, средняя оценка - 4.60
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269

Алгоритм Диффи-Хеллмана

21.04.2020, 01:36. Показов 8099. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что-то я запутался (или устал)
Опишу как в примере:
Generate prime number GENERATOR (0x1D) --> Check GENERATOR (0x1D) is prime and store. Respond OK.
Generate prime number MODULUS (0x35) --> Check MODULUS (0x35) is prime and store. Respond OK.
Generate Random Number HOST_RND (0x53)
Calculate HostInterKey (0x2B) = (GENERATOR ^ HOST_RND) mod MODULUS // как это реализовать на шарпе?

И как рашифровать Calculate Key (0x2B): =(SlaveInterKey ^ HOST_RND) mod MODULUS
Кликните здесь для просмотра всего текста


(сорь за картинку, уже не знаю как объяснить)

Как-то так пока что
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
internal byte[] SendAndReceive(byte[] Data, byte requestedRoute = 0, byte[] value = null, byte[] countryCode = null)
        {
            if (!_port.IsOpen) throw new InvalidOperationException("Устройство не открыто.");
            if (_port.BytesToRead > 0) _port.DiscardInBuffer();
            if (_port.BytesToWrite > 0) _port.DiscardOutBuffer();
 
            Random r = new Random();
            int generator = 29;//47;//r.Next(50, 100);
            int mod = 53; // r.Next(1, 49);
            int hostInter = 43; //24;// r.Next(5, 49);
            byte[] arr = new byte[9];
            byte[] ar1 = BitConverter.GetBytes(generator);
            byte[] ar2 = BitConverter.GetBytes(mod);
            byte[] ar3 = BitConverter.GetBytes(hostInter);
 
            List<byte> data = new List<byte>();
            List<byte> toCRC = new List<byte>();
            List<byte> response = new List<byte>();
            lock (_locker)
            {
                data.Add(First_STX);
                toCRC.Add(parity);               
                switch (Data[0])
                {
                    case (byte)Command.SetGenerator:
                        toCRC.Add((byte)arr.Length);                        
                        arr[0] = (byte)Command.SetGenerator;
                        ar1.CopyTo(arr, 1);
                        toCRC.AddRange(arr);
                        break;
                    case (byte)Command.SetModulus:
                        toCRC.Add((byte)arr.Length);
                        arr[0] = (byte)Command.SetModulus;
                        ar2.CopyTo(arr, 1);
                        toCRC.AddRange(arr);
                        break;
                    case (byte)Command.RequestKeyExchange:
                        toCRC.Add((byte)arr.Length);
                        arr[0] = (byte)Command.RequestKeyExchange;
                        ar3.CopyTo(arr, 1);
                        toCRC.AddRange(arr);
                        break;
                    case (byte)Command.SetDenominationRoute:
                        toCRC.Add((byte)arr.Length);
                        arr[0] = (byte)Command.SetDenominationRoute;
                        arr[1] = requestedRoute;
                        value.CopyTo(arr, 2);
                        countryCode.CopyTo(arr, 6);
                        toCRC.AddRange(arr);
                        break;
                    default:
                        toCRC.Add((byte)Data.Length);
                        toCRC.AddRange(Data);
                        break;
                }
 
                toCRC.AddRange((Crc16CMS.ComputeChecksumBytes(toCRC.ToArray())));
                data.AddRange(toCRC);
 
                _port.Write(data.ToArray(), 0, data.Count);
                Console.Write($"\nWrite --> {BitConverter.ToString(data.ToArray())}");
 
                Thread.Sleep(1001);
                if (_port.BytesToRead > 0)
                {
                    var dataByte = new byte[_port.BytesToRead];
                    _port.Read(dataByte, 0, dataByte.Length);
                    Thread.Sleep(10);
                    response.AddRange(dataByte);
                    _port.DiscardInBuffer();
                }
                else
                    throw new Exception("Время ожидания ответа превышено");
                Console.Write("\nRead <-- ");
                foreach (var item in response)
                {
                    Console.Write(" " + item.ToString("X2"));
                }
 
                if (parity == SEQ1)
                    parity = SEQ0;
                else
                    parity = SEQ1;
            }
            return data.ToArray();
        }

Говнокодом
C#
1
2
3
int generator = 29;//47;//r.Next(50, 100);
            int mod = 53; // r.Next(1, 49);
            int hostInter = 43; //24;// r.Next(5, 49);
Приходит что всё ок, но как реально шифровать и дешифровать сообщения?
Кто-то сталкивался с eSSP implements AES with a 128-bit key.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2020, 01:36
Ответы с готовыми решениями:

Протокол Диффи-Хеллмана
Решил реализовать передачу ключа по протоколу ДХ, вот исходник: static void Main(string args) { ...

Алгоритм Диффи-Хелмана для 4-х абонентов
Требуется реализовать алгоритм Диффи-Хеллмана для четырех абонентов.

Алгоритм Диффи — Хеллмана програмная реализацыя
(Прошу прощения за корявый русский) помогите з реализацией етого алгоритма) По заданию уменя есть g(в степени)а mod p (). а и g могут...

3
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
21.04.2020, 13:32  [ТС]
Плез, покажите как реализовать выражение Calculate HostInterKey (0x2B) = (GENERATOR ^ HOST_RND) mod MODULUS ,
пробовал стандартно через Abs, пробовал класс ECDiffieHellmanCng, и пр вещи, но что-то у меня не сходится.

Добавлено через 1 час 0 минут
Ничего не пойму, я же правильно сделал по видео, а общие ключи не совпадают, где я ошибся?

https://www.youtube.com/watch?v=vFjq9pID4-E
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static void Main()
    {
        int generator = 3;// generator
        int mod = 17; //  module
         
        int alice = 54; // private number
        int bob = 24; // private number
 
 
        var a = Math.Pow(generator, alice) % mod; // alice //Public
        var b = Math.Pow(generator, bob) % mod; // bob     //Public
 
        var res = Math.Pow(b, alice) % mod; // alice generic key
        var res1 = Math.Pow(a, bob) % mod; // bob    generic key
 
        Console.ReadKey();
    }
Добавлено через 17 минут
С примером разобрался, у меня просто произошло переполнение)
0
0 / 0 / 0
Регистрация: 04.02.2020
Сообщений: 1
26.04.2021, 23:16
ShmelVG, есть готовый проект? поделитесь
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
29.04.2021, 17:07  [ТС]
Daria_14, да, я запрашивал инфу у офф производителей оборудования. Повезло)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.04.2021, 17:07
Помогаю со студенческими работами здесь

Алгоритм Диффи-Хеллмана
необходимо реализовать алгоритм Диффи-Хеллмана на перл

Простейший алгоритм Диффи-Хеллмана
Пробую совсем просто, без заморочек, написать алгоритм ДХ, но в результате ключи почему-то разные... Подскажите, может я где-то ошибся... ...

Алгоритм Диффи-Хеллмана. Ошибка вычисления
Добрый вечер, я реализую алгоритм Диффи-Хелмана и столкнулся со следующими проблемами 1) в программе неправильно вычисляется значение k2...

Алгоритм Диффи-Хеллмана на эллиптических кривых
Здравствуйте , не поможете разобраться с алгоритмом Диффи-Хелмана на эллиптических кривых? Я видимо не совсем правильно понимаю работу...

Можно ли отнести к сессионным ключам алгоритм Диффи Хеллмана?
У меня в курсовом проекте стоит задача - создать программу(на lazarus), которая будет генерировать сессионные ключи. Можно ли отнести к...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru