如何在 Java 中使用 RSAPublicKey 和 RSAPrivateKey 类?

Posted

技术标签:

【中文标题】如何在 Java 中使用 RSAPublicKey 和 RSAPrivateKey 类?【英文标题】:How to use RSAPublicKey and RSAPrivateKey classes in Java? 【发布时间】:2018-09-03 03:48:15 【问题描述】:

我正在尝试使用 [Java JWT] 库(https://github.com/auth0/java-jwt) 来生成 JWT,我需要创建私钥和公钥的实例,即 RSAPrivateKey 和 RSAPublicKey。

//RSA
RSAPublicKey publicKey = //Get the key instance
RSAPrivateKey privateKey = //Get the key instance
Algorithm algorithmRS = Algorithm.RSA256(publicKey, privateKey);

如何创建 RSAPrivateKey 和 RSAPublicKey 的实例?

我已经使用 OpenSSL 创建了 .pem 文件(如果有帮助的话),但我也无法使用它。

【问题讨论】:

您需要生成一个 KeyPair,这样 PrivateKey 才能用于解码 PublicKey。看看这个链接docs.oracle.com/javase/tutorial/security/apisign/step2.html @FattySalami 您提供的链接提供了一种生成 PublicKey 和 PrivateKey 类实例的方法,但我需要 RSAPublicKey 和 RSAPrivateKey 类的实例。请注意。如果您提供代码 sn-p 或一些解释将非常有帮助。谢谢。 【参考方案1】:

首先创建 KeyPairGenerator 以创建 KeyPairs。

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");

这将为您提供一个使用 RSA 的 KeyPairGenerator。接下来,使用您希望它使用的字节数初始化生成器,然后创建 KeyPair。

kpg.initialize(1024);
KeyPair kp = kpg.generateKeyPair();

使用它们的 Getter 从 KeyPair kp 中获取 PublicKey 和 PrivateKey,而不是因为 RsaPublicKey 只是 Key 的子类,我们使用 RSA 制作了这些密钥,我们可以安全地将 PublicKey 和 PrivateKey 类转换为 RSAPublicKey 和 RSAPrivateKey

RSAPublicKey rPubKey = (RSAPublicKey) kp.getPublic();
RSAPrivateKey rPriKey = (RSAPrivateKey) kp.getPrivate();

【讨论】:

该代码生成一个新的密钥对。如果您想使用现有的密钥对,只需从密钥库(更快)或 pem 文件 ***.com/questions/11787571/… 加载它

以上是关于如何在 Java 中使用 RSAPublicKey 和 RSAPrivateKey 类?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法使用 PEM_read_RSAPublicKey 读取 openssl 生成的 RSA pub 密钥?

求助,在android端使用openssl生成的rsapublicKey解密的相关问题

RSA加密解密

RSA加密解密

将 OpenSSL RSA 密钥与 .Net 一起使用

从 base64 RSA 公钥生成 SecKeyRef