【问题标题】:Java RSA how to generate different public key?Java RSA如何生成不同的公钥?
【发布时间】:2011-12-21 11:49:57
【问题描述】:

在 java 中为 RSA 生成公钥时遇到问题。我使用 KeyPairGenerator 并获得公钥、私钥、p、q 和模数。没事。但是每次公钥都是65537。有没有可能每次生成不同的公钥?

代码:

KeyPair keys;
KeyPairGenerator generator;

try {
    generator = KeyPairGenerator.getInstance("RSA");
    generator.initialize(1024);
    keys = generator.genKeyPair();
} catch (NoSuchAlgorithmException ex) {} 

【问题讨论】:

  • 向我们展示您的代码。你一定做错了什么。

标签: java rsa public-key


【解决方案1】:

值 65537 是commonly used exponent of RSA keys。这个值是固定的并且没有安全隐患,这并不奇怪。

有许多已知的弱指数已知 - 但这个值不属于它。

【讨论】:

    【解决方案2】:

    公钥不能简单地是 65537,因为在 RSA 中,公钥是一对 (n,e),其中 n 是模数,e 是指数。通常,指数等于 65537,变化的是模数。

    因此,为了确保每次生成不同的密钥,请检查模数是否在变化。

    【讨论】:

    • 模数、p、q和私钥每次都不一样
    • 如果模数每次都不一样,那么公钥也每次都不一样。指数 e 通常选择为 65537。请查看*文章“密钥生成”中的第 4 步:en.wikipedia.org/wiki/RSA_%28algorithm%29
    • 我正在投射 RSAPublicKey public = (RSAPublicKey)keys.getPublic();要获取公钥,我正在使用 .getPublicExponent()。我做错了吗?与私钥相同,我正在使用 getPrivateExponent()
    • @user1068894:你做错的是说话而不是听。阅读*文章。
    • 好的,我明白了。 RSA 密钥是一对这个指数和模数 :) thx:)