![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Finalist |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 23.5.2006 Репутация: нет Всего: 1 |
Привет всем!
Хочу реализовать шифрование по схеме Эль-Гамаля. Столкнулся с проблемой больших чисел, которые не помещаются в double. Использовать библиотеку больших чисел не охота.. хочу все сам сделать. Например формула по вычислению открытого ключа Y выглядит следующим образом y = g ^ k MOD p ( остаток от деления (g в степени k) на p ) при использовании стандартных функций pow(); и fmod(); результат выходит неверный.. не хватает точности double. Я решил эту задачу следующим образом..
на выходе получается все ок.. далее идет вычисление шифротекста a и b a = g ^ k mod p тут все просто, так же как с Y
с b немного сложнее, но тоже решил.. b = y^k * M mod p (где M шифруемое число)
вот теперь эти (a,b) я передаю по сети, на сервере ловлю.. и расшифровываю по формуле.. (b / a^x) mod p и вот тут загвоздка.. не силен я в математике.. когда вычислял b там просто один раз в цикле умножил b на M.. но тут, нужно разделить b на a^x и только потом вычислить mod p. как я только не пробовал... ничего не выходит.. числа получаются не те, что я шифрую... может кто нибудь из математиков будет смотреть.. и знает как сократить дробь? например такую... 517 / (345^68) mod 809 = 100 у меня ни при каких расчетах не выходит 100. примеры реализации и формулы брал на википедии, и еще одном сайте ( http://masteroid.ru/content/view/1286/49/ ) только на mesteroid'е мой Y заменен на H... а A и B заменены на C1 и C2 соответственно... А еще на википедии и mesroid немного разные формулы расшифровывания текста..
возможно они одинаковы.. я не математик (а мама говорила учись! пригодится) P.S. Забыл сказать, что qreal = double ... использую Qt Это сообщение отредактировал(а) Finalist - 22.4.2011, 17:38 |
||||||||
|
|||||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Finalist, без математики больших чисел тебе не обойтись. Возьми эту библиотеку.
Правильно говорила. Программировать, не зная математики, очень сложно. Эти формулы одинаковы: x^-n == (1 / x) ^ n == 1 / (x ^ n) |
|||
|
||||
| Finalist |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 23.5.2006 Репутация: нет Всего: 1 |
Я почему-то так и думал.. что без них никак.
Придется качать! Спасибо bsa!! буду делать на большоой либе. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Вообще-то, та либа, что я тебе дал, очень маленькая. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |