gpt4 book ai didi

java - 实现RSA算法的小故障

转载 作者:行者123 更新时间:2023-12-01 05:52:50 25 4
gpt4 key购买 nike

我正在尝试实现 RSA algorithm ,但由于某种原因,我下面的代码没有产生正确的结果(请注意,仅显示相关代码)。

BigInteger n = p.multiply(q);
BigInteger totient = (p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE));

Random rand = new Random();
BigInteger e;
do
{
e = new BigInteger(totient.bitLength(), rand);
} while ((e.compareTo(BigInteger.ONE) <= 0 || e.compareTo(totient) >= 0)
&& !((e.gcd(totient)).equals(BigInteger.ONE)));

BigInteger d = (BigInteger.ONE.divide(e)).mod(totient);

使用 127 和 131 作为素数输入的示例输出(请注意,16637 是正确的,但 7683 和 0 不是):

Public Key: (16637,7683)
Private Key: (16637,0)

感谢您的帮助!

最佳答案

评论是正确的。您应该使用 modInverse() BigInteger 的方法来计算逆数。所以最后一行应该是:

BigInteger d = e.modInverse(totient);

此外,我不完全确定我理解 while 循环中的条件。也许最后一个 && 应该是 || ?就我个人而言,我会使用一个单独的方法来返回正确范围内的随机数。

关于java - 实现RSA算法的小故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4056838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com