首页 > 解决方案 > java中大数的模数

问题描述

我正在用java编写一个RSA解密原型。这只是为了展示它如何在学校工作,这就是为什么我尽量让它尽可能简单。但是当我进入解密部分时,我必须使用以下公式:

c = m^e % n。

出于测试目的,我尝试使用m = "1010"(因为我从我的程序中将它作为字符串获取)、e = 55n = 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

请告诉我我错在哪里或如何解决这个问题。提前致谢。

标签: javaintegerbigdecimalmodulusalgebra

解决方案


我建议使用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); 

推荐阅读