Java中的计算不等于预期结果

 振芳婉仁正君 发布于 2023-02-07 14:07

我试图在Java中实现RSA算法.

当你看一下这个页面:http://en.wikipedia.org/wiki/RSA_(algorithm)#A_working_example你可以看到这个计算:

c = 65 ^ 17 mod 3233 = 2790

当我使用这个Java代码时:

double valc = Math.pow(65, 17) % 3233;
System.out.println("Expected = 2790, computed = " + valc);

结果是:

Expected = 2790, computed = 887.0

我究竟做错了什么?

1 个回答
  • 您假设浮点计算精确到一个疯狂的数字位数,它们不是.pow不是正确的计算方法65^17.你真的想做

    65 * 65 * 65 ...
    

    所以

    result = 1;
    for(ii = 0; ii < 17; ii++) result *= 65;
    

    这将导致精度损失(它具有比内置类型可以表示的更多的数字).

    看一下模数计算可以显着简化这些计算的方式.例如,参见https://math.stackexchange.com/questions/36318/modulo-arithmetic-with-big-numbers

    它表明您可以执行以下操作:

    result = 1;
    for(ii = 0; ii < 17; ii++) {
      result *= 65;
      result = result % 3233;
    }
    

    有比这更有效的方法 - 但这会给你正确的结果.见http://jdoodle.com/a/2l

    2023-02-07 14:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有