PKCS10CertificationRequest csr =...;
PublicKey pk = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(csr.getSubjectPublicKeyInfo().toASN1Primitive().getEncoded()));
RFC 2986-PKCS#10:認証要求構文
CertificationRequestInfo :: = SEQUENCE{
バージョンINTEGER{v1(0)}(v1、...)、
サブジェクト名、
subjectPKInfo SubjectPublicKeyInfo {{PKInfoAlgorithms}}、
属性[0]属性{{CRIAttributes}}
}
SubjectPublicKeyInfo {ALGORITHM:IOSet} :: = SEQUENCE{
アルゴリズムAlgorithmIdentifier{{IOSet}}、subjectPublicKey
ビット文字列
}
次に、java.security.spec.X509EncodedKeySpecのドキュメントを見ることができます
SubjectPublicKeyInfo :: = SEQUENCE {
アルゴリズムAlgorithmIdentifier、 subjectPublicKeyビット文字列
}
したがって、この公開鍵のエンコーディングはX.509であることがわかります。次に、それをX509EncodedKeySpecに変更し、keyFactoryによって公開鍵を生成します