我正在尝试制作类似RSA的加密程序。因此,我需要执行计算1069 ^ 1099。问题在于,根据Javascript,该计算的结果是无穷大。有什么办法可以解决这个问题?

var n = 23 * 83;
var e = 87;
var d = 1099;
var m = 1069;
var m = m**d % n; //Result NaN because m**d = infinity

最佳答案

如果您只是在开发不使用巨大质数的玩具RSA密码,则可以如下实现modular exponentation

function modexp(base, exponent, modulus) {
    var result = 1;
    while (exponent) {
        if (exponent & 1) {
            result = (result * base) % modulus;
        }
        base = (base * base) % modulus;
        exponent >>= 1;
    }
    return result;
}


Wikipedia文章有详细的描述,但是它的基本作用是将xe分解为x的乘积,该乘积升为与e的二进制表示形式的每个设置位相对应的数字的幂。例如,x13 == x8×x4×x1(因为1310 == 11012)。可以通过在每个步骤中对x求平方并在每次计算后应用模数来有效地计算,以使数字不会太大。

正如其他人所说,您将需要big number library来处理实际的RSA密钥。

09-30 16:20
查看更多