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