Преобразовать SubjectPublicKeyInfo в Java PublicKey - PullRequest
0 голосов
/ 20 ноября 2018

Мое приложение использует bouncycastle для более глубокого декодирования сертификатов, чем при использовании нативного java X509Сертификат, фактически у меня есть сертификаты bouncy castle (org.bouncycastle.asn1.x509.Certificate).

Мой вопрос заключается в том, как обеспечить безопасное преобразование org.bouncycastle.asn1.x509.SubjectPublicKeyInfo в java.security.Publickey.?

Я бы хотел использовать стандартный метод подписи Java java.security.Signature вместо альтернатив BouncyCastle.

Signature sig = Signature.getInstance(signatureAlgorithm.getAlgorithm().getId());
        sig.initVerify(getPublicKey());
        sig.update(content);
        return sig.verify(signature);

1 Ответ

0 голосов
/ 20 ноября 2018

Способ преобразования ключа заключается в использовании RSAKeyParameter и RSAPublicKeySpec для «восстановления» ключа с использованием модуля и экспоненты.

RSAKeyParameters rsa = (RSAKeyParameters) PublicKeyFactory.createKey(certificate.getSubjectPublicKeyInfo());

RSAPublicKeySpec rsaSpec = new RSAPublicKeySpec(rsa.getModulus(), rsa.getExponent());
KeyFactory kf = KeyFactory.getInstance("RSA");
java.security.Publickey publicKey = kf.generatePublic(rsaSpec);
...