java 中大数的模数
Modulus with big numbers in java
我正在 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
请告诉我哪里错了或者我该如何解决这个问题。提前致谢。
我建议使用 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);
我正在 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
请告诉我哪里错了或者我该如何解决这个问题。提前致谢。
我建议使用 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);