如何使用新的Bouncy Castle库从PKCS10CertificationRequest获取PublicKey?

Mic*_*las 7 java cryptography bouncycastle

在新版本的Bouncy Castle库中有一些变化PKCS10CertificationRequest.在以前的版本中,可以PublicKey使用getPublicKey()方法获得此类请求(请参阅旧文档).

现在这种方法消失了.如何通过此类请求获取PublicKey?有,getSubjectPublicKeyInfo().parsePublicKey()但它返回ASN1Primitive.

我从SPKAC看到NetscapeCertRequest我仍然可以通过调用直接读取PublicKey getPublicKey().

Jam*_*olk 11

主提供程序包中有一个名为PublicKeyFactory的实用程序类.createKey方法返回一个AsymmetricKeyParameter,您可以将其转换为适当的任何类型的公钥,例如

SubjectPublicKeyInfo pkInfo = pkcs10CertReq.getSubjectPublicKeyInfo();
RSAKeyParameters rsa = (RSAKeyParameters) PublicKeyFactory.createKey(pkInfo);
Run Code Online (Sandbox Code Playgroud)

编辑1:

此外,还需要创建java.security.PublicKey更多步骤:

RSAPublicKeySpec rsaSpec = new RSAPublicKeySpec(rsa.getModulus(), rsa.getExponent());
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey rsaPub = kf.generatePublic(rsaSpec);
Run Code Online (Sandbox Code Playgroud)


lv.*_*lv. 5

我正在研究同样的问题,这也会起作用(我们不需要指定算法的优势):

SubjectPublicKeyInfo pkInfo = pkcs10CertReq.getSubjectPublicKeyInfo();
JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
PublicKey pubKey = converter.getPublicKey(pkInfo);
Run Code Online (Sandbox Code Playgroud)

请参阅org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter