看完这个视频后http://youtu.be/3QnD2c4Xovk http://youtu.be/3QnD2c4Xovk
我一直试图一步一步地遵循它,但未能产生相同的结果。
值得注意的是,当我尝试执行 Math.pow(3, 54)%17 时,我得到 7。而演讲者得到 15。
我编写了一种方法,该方法应该使用我在上找到的内容来模拟 Diffie Hellman 密钥交换http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange 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 实现 Diffie-Hellman 的密钥交换。这是我最熟悉的语言,但我担心这可能是 javascript 的限制。