IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Алгоритм Диффи-Хеллмана, Проблемы с математикой ((
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


В принципе реализация алгоритма понятна, проблемы с нахождением первообразного корня по модулю m

http://ru.wikipedia.org/wiki/Первообразный..._(теория_чисел)

И понятия не имею как это запрограммировать, если можете, помогите пожалуйста.

В методичке есть реализация на C++, а обучение на Delphi, поэтому непонятно вообще ...


Реализация

Функция powmod() выполняет бинарное возведение в степень по модулю, а функция generator (int p) - находит первообразный корень по простому модулю (факторизация числа здесь осуществлена простейшим алгоритмом за ). Чтобы адаптировать эту функцию для произвольных , достаточно добавить вычисление функции Эйлера в переменной phi.

int powmod (int a, int b, int p) {
int res = 1;
while (b)
if (b & 1)
res = int (res * 1ll * a % p), --b;
else
a = int (a * 1ll * a % p), b >>= 1;
return res;
}

int generator (int p) {
vector<int> fact;
int phi = p-1, n = phi;
for (int i=2; i*i<=n; ++i)
if (n % i == 0) {
fact.push_back (i);
while (n % i == 0)
n /= i;
}
if (n > 1)
fact.push_back (n);

for (int res=2; res<=p; ++res) {
bool ok = true;
for (size_t i=0; i<fact.size() && ok; ++i)
ok &= powmod (res, phi / fact[i], p) != 1;
if (ok) return res;
}
return -1;
}


Сообщение отредактировано: SeregaR1Val -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
SeregaR1Val   Алгоритм Диффи-Хеллмана   27.04.2010 0:12
volvo   Ну, а что именно непонятно? У тебя ж есть С++ ный …   27.04.2010 1:17
SeregaR1Val   TList<Integer> не пропускает, исправил на TL…   27.04.2010 18:42
volvo   Блин... Я все время забываю, что не у всех Дельфи …   27.04.2010 18:53
SeregaR1Val   Терзают сомнения, что алгоритм описанный в методе …   28.04.2010 21:46
Ozzя   var r,k:longint;i:integer; begin r:=1; for i:=1 …   28.04.2010 22:02
volvo   На самом деле она вычисляет (A^2e) mod m, и возвра…   28.04.2010 22:05
SeregaR1Val   Спасибо. теперь работает лучше, помогите пожалуйст…   28.04.2010 22:47
SeregaR1Val   Function TForm1.modes(A,e,m:integer):longint; var …   29.04.2010 0:06
volvo   Вот это: Function TForm1.modes(A, e, m:integer): l…   29.04.2010 1:01
SeregaR1Val   var PArray:array[1..100] of integer; procedure T…   29.04.2010 13:32
volvo   function TForm1.Arrayes:integer; // Создает случа…   29.04.2010 16:58
SeregaR1Val   Спасибо, стало лучше работать, но g в половине слу…   29.04.2010 18:20
volvo   Ну, а теперь посмотри внимательно на функцию (я не…   29.04.2010 18:27
SeregaR1Val   Спасибо большое! Очень помог!   29.04.2010 19:30


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 3.05.2024 0:54
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name