Java中具有大数的模数

时间:2019-01-13 01:05:55

标签: java integer bigdecimal modulus algebra

我正在用Java编写RSA解密原型。只是为了显示它在学校中的工作原理,这就是为什么我尝试使其尽可能简单。但是当我进入解密部分时,我必须使用公式:

c = m ^ e%n。

出于测试目的,我尝试使用 m =“ 1010” (因为我从程序中将其作为字符串获得), e = 55 n = 361 。这应该给我345作为c(在Windows计算器中测试)。我得到的结果是:

Math.pow(Integer.parseInt("1010"), 55) % 361 // 115.0

BigDecimal b = BigDecimal.valueOf(Math.pow(Integer.parseInt("1010"),55));

(b.remainder(BigDecimal.valueOf(361))).doubleValue() // 300.0

Math.pow(Integer.parseInt("1010"), 55) % 361 //  340

请告诉我哪里错了或如何解决。预先感谢。

1 个答案:

答案 0 :(得分:3)

我建议使用BigInteger,在这种情况下,知道幂运算可能会导致溢出(在大多数情况下)会很有用。在这里,我附带了一个使用BigInteger的示例的应用程序,希望对您有所帮助:

 BigInteger m  = BigInteger.valueOf(1010);
 BigInteger e  = BigInteger.valueOf(55);
 BigInteger n  = BigInteger.valueOf(361);
 BigInteger c = m.modPow(e,n);
 System.out.println(c);