【发布时间】:2014-07-10 13:33:16
【问题描述】:
看完这个视频 http://youtu.be/3QnD2c4Xovk
我一直在尝试一步一步地遵循它,但未能产生相同的结果。
值得注意的是,当我尝试执行 Math.pow(3, 54)%17 时,我得到 7。而扬声器得到 15。
我编写了一个方法,该方法应该使用我在 http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange 上找到的内容来模拟 Diffie Hellman 的密钥交换
这是我的代码:
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 的限制。
【问题讨论】:
-
您正在尝试使用一种将所有数字存储为浮点数的语言进行大规模整数数学运算。您将需要真正的整数类型。
-
(3^54) mod 17 = 15所以这里 Javascript 可能不是正确的选择(我在 Chrome 中也得到 7)
标签: javascript public-key-encryption diffie-hellman