java - java中大数的模数

标签 java integer bigdecimal modulus algebra

我正在用 java 编写 RSA 解密原型(prototype)。这只是为了展示它如何在学校中发挥作用,这就是为什么我尝试使其尽可能简单。但是当我到达解密部分时,我必须使用公式:

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

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

最佳答案

我建议使用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 - java中大数的模数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54165293/

相关文章:

java - Spring 批处理 : How to configure PagingQueryProvider without a SortKeys

java - 将堆转储保存在不同驱动器中的 JVM 参数

postgresql - 将 int 范围排序为 PostgreSQL 日期范围

java - 转换为正确的 BigDecimal 表示形式

Java流乘法并返回乘法之和

java - 从 Java 中的 BigDecimal 中删除尾随零

java - 了解 Swing 中的命令模式

java - 无法使用 SpringSource Tool Suite 计算构建计划

java - 只让用户输入正整数(不能输入小数或字符串)?

java - 类型不匹配 : cannot convert from List<SelectOption<Integer>> to List<SelectOption<String>>?