我正在用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
请告诉我哪里错了或如何解决。预先感谢。
答案 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);