# -*- coding: utf-8 -*-
import random
if __name__ == "__main__":
p = 23;
g = 5;
print "p =", p, "g =", g;
A = random.randint(10**4,10**5-1);
print "Alice A =", A;
send2bob = g**A % p;
print "Alice send Bob g^A mod p =", send2bob;
B = random.randint(10**4,10**5-1);
print "Bob B =", B;
send2alice = g**B % p;
print "Bob send Alice g^B mod p =", send2alice;
print "Alice calc K =", send2alice**A % p;
print "Bob calc K =", send2bob**B % p;
реализация алгоритма Diffie-Hellman
http://ru.wikipedia.org/wiki/Алгоритм_Диффи_—_Хеллмана
Реализовать сам принцип генерации ключа не так сложно, вот накидал код на питоне:
Код:
Вопрос как генерировать p и g. если верить викам то p должно быть порядка 10**300 (простым или почти простым ибо найти такое простое число сегодня даже с супер компьютерами не реально), a и b 10*100. и вычисления g**a и g**b слишком долгим выходит.
как решить эти проблемы.
имхо реализовывать это на си или питоне не так влияет тут на производительность, ибо подождать секунду или 10 секунд не принципиально.
А ждать сутки или 10 суток не уже не допустимо=)
Если не хотите реализовывать большие числа - можно взять готовые. например в OpenSSL есть подбиблиотечка для работы с большими числами (BIGNUM) и в том числе и генератор простых, взаимнопростых числе для них.
Благодарствую за ответ. Хотелось бы узнать как реализуются эти алгоритмы. И самому реализовать. Но возится в исходниках OpenSSL требует слишком много времени, а его у меня нет. Попробую либу BIGNUM