实现RSA算法的小故障

时间:2010-10-30 01:15:25

标签: java cryptography rsa biginteger

我正在尝试实现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)

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

BigInteger d = e.modInverse(totient);

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