我试图了解 RSA key 生成的工作原理,因此尝试用 Java 实现它。它已经生成了 key ,但是当我使用生成的 key 加密和解密某些内容时,我的 key 似乎是错误的。这是我生成 key 的代码:
public void generateNewKeypair(int bit) {
BigInteger[] primes = generatePrimes(2, bit / 2);
BigInteger p = primes[0];
BigInteger q = primes[1];
modulo = q.multiply(p);
BigInteger pN = (q.subtract(BigInteger.valueOf(1))).multiply(p.subtract(BigInteger.valueOf(1)));
publicKey = BigInteger.ZERO;
while (publicKey.equals(BigInteger.ZERO)) {
BigInteger rnd = new BigInteger(pN.bitLength(), random);
if (rnd.compareTo(pN) <= 0 && rnd.gcd(pN).equals(BigInteger.ONE)) {
publicKey = rnd;
}
}
privateKey = publicKey.modInverse(modulo);
}
这就是整个类(class):http://pastebin.com/DDQh2Q3n
最佳答案
这是您的错误:
privateKey = publicKey.modInverse(modulo);
您需要计算这个逆模 (p-1)(q-1),即变量 pN。所以尝试一下
privateKey = publicKey.modInverse(pN);
看看是否没有得到更好的结果。
关于Java RSA key 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24792679/