我正在尝试制作类似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密钥。