Java RSA key 生成

标签 java encryption rsa

我试图了解 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/

相关文章:

wcf - 消息加密不适用于 wsHTTPBinding

swift - 使用 Apples CryptoKit 在 iOS 和 Kotlin/Java 之间进行跨平台 AES 加密

java - RSA加密(java)读取字符串输入

javascript - javascript中的RSA加密和Java中的解密

java - 从 war/ear 外部访问多个应用程序服务器的属性文件

java - Android 小部件更新不起作用

java - 谷歌云平台 : cannot access Pubsub from Container Engine

ios - 适用于 iOS 的 Magical Record 和 SQLCipher - NSPersistentStore 创建返回 nil

java - 无法使用开放式 SSL 解密 RSA 数据

java - 您可以使用 java.util.Random 找到以前生成的随机数吗?