После просмотра этого видео http://youtu.be/3QnD2c4Xovk
Я пытался следовать этому шаг за шагом, и не смог добиться тех же результатов.
Примечательно, что когда я пытаюсь выполнить Math.pow(3, 54)%17, я получаю 7. В то время как говорящий получает 15.
Я написал метод, который должен имитировать обмен ключами Диффи Хеллмана, используя именно то, что я нашел на http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
Это мой код:
function diffieHellman(generator, prime, alice_secret, bob_secret){
var alice_public = Math.pow(generator, alice_secret)%prime
, bob_public = Math.pow(generator, bob_secret)%prime
, alice_private = Math.pow(bob_public, alice_secret)%prime
, bob_private = Math.pow(alice_public, bob_secret)%prime;
console.log("alice"
, "\n\t", "secret -- ", alice_secret
, "\n\t", "public -- ", alice_public
, "\n\t", "private -- ", alice_private
)
console.log("bob"
, "\n\t", "secret -- ", bob_secret
, "\n\t", "public -- ", bob_public
, "\n\t", "private -- ", bob_private
)
return {
alice:{
secret: alice_secret
, public: alice_public
, private: alice_private
},
bob:{
secret: bob_secret
, public: bob_public
, private: bob_private
}
}
};
Эти примеры работают:
diffieHellman(3, 17, 4, 12) // 1, 1
diffieHellman(3, 23, 6, 19) // 12, 12
diffieHellman(3, 13, 8, 4) // 9, 9
Однако некоторые номера не работают
diffieHellman(3, 17, 40, 120) // 13, 0
diffieHellman(3, 23, 16, 129) // 21, 2
diffieHellman(3, 13, 44, 11) // 9, 1
Что я делаю не так?
Изменить. Я не пытаюсь реализовать обмен ключами Диффи-Хеллмана в Javascript для проекта. Это просто язык, с которым мне удобнее всего, но я боюсь, что это может быть ограничением javascript.
(3^54) mod 17 = 15
поэтому Javascript может быть здесь неправильным выбором (я также получаю 7 в Chrome) - person devnull69   schedule 10.07.2014