Diffie Hellman 密钥交换不工作 (Javascript)
Diffie Hellman Key Exhange not working (Javascript)
我尝试在 javascript 无插件 中创建 Diffie Hellman 密钥交换系统。不幸的是,我的代码不起作用,并且经常创建 2 个 不同的 个密钥。
代码:
var g = next_Prime_num(Math.ceil(Math.random() * 50));
var n = next_Prime_num(Math.ceil(Math.random() * 50) + 50);
var a = Math.ceil(Math.random() * (n - 1));
var b = Math.ceil(Math.random() * (n - 1));
var A = mod(Math.pow(g, a), n);
var B = mod(Math.pow(g, b), n);
var Ka = mod(Math.pow(B, a), n);
var Kb = mod(Math.pow(A, b), n);
function next_Prime_num(num) {
for (var i = num + 1;; i++) {
var isPrime = true;
for (var d = 2; d * d <= i; d++) {
if (i % d === 0) {
isPrime = false;
break;
}
}
if (isPrime) {
return i;
}
}
}
function mod(n, m) {
return n%m;
}
n: 必须是质数 是的,但是
g:必须是 n 的原根,而不仅仅是质数
这是你的错误,你必须添加另一个函数才能从 givin prim number
里面的Math.pow()肯定会不时出现整数溢出。在 javascript 中,您可以在不丢失精度或最大安全整数的情况下拥有的最大整数是 (2<sup>53</sup> - 1)
或 9007199254740991
。
您可以做的是创建一个使用 modular exponentiation.
的幂函数
看看这个类似的问题 - Diffie-Hellman Key Exchange with Javascript sometimes wrong
我尝试在 javascript 无插件 中创建 Diffie Hellman 密钥交换系统。不幸的是,我的代码不起作用,并且经常创建 2 个 不同的 个密钥。
代码:
var g = next_Prime_num(Math.ceil(Math.random() * 50));
var n = next_Prime_num(Math.ceil(Math.random() * 50) + 50);
var a = Math.ceil(Math.random() * (n - 1));
var b = Math.ceil(Math.random() * (n - 1));
var A = mod(Math.pow(g, a), n);
var B = mod(Math.pow(g, b), n);
var Ka = mod(Math.pow(B, a), n);
var Kb = mod(Math.pow(A, b), n);
function next_Prime_num(num) {
for (var i = num + 1;; i++) {
var isPrime = true;
for (var d = 2; d * d <= i; d++) {
if (i % d === 0) {
isPrime = false;
break;
}
}
if (isPrime) {
return i;
}
}
}
function mod(n, m) {
return n%m;
}
n: 必须是质数 是的,但是 g:必须是 n 的原根,而不仅仅是质数 这是你的错误,你必须添加另一个函数才能从 givin prim number
里面的Math.pow()肯定会不时出现整数溢出。在 javascript 中,您可以在不丢失精度或最大安全整数的情况下拥有的最大整数是 (2<sup>53</sup> - 1)
或 9007199254740991
。
您可以做的是创建一个使用 modular exponentiation.
看看这个类似的问题 - Diffie-Hellman Key Exchange with Javascript sometimes wrong