如何在 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 密钥?