Как я могу прочитать PEM-файл с закрытым ключом BouncyCastle, используя JCA? [Дубликат]

На этот вопрос уже есть ответ:

преобразовать ключ openSSH rsa в формат javax.crypto.Cipher-совместимый 1 ответ

В одном из наших приложений личные ключи хранятся с помощью PEMWriter BouncyCastle. Сейчас я изучаю, сможем ли мы избавиться от зависимости BouncyCastle, поскольку в Java 7, похоже, есть все, что нам нужно. Единственная проблема заключается в том, что я не могу прочитать закрытые ключи, хранящиеся в базе данных, как строки в кодировке PEM (сертификаты / открытые ключи в порядке).

Если я сохраняю строку PEM-кода закрытого ключа из базы данных в файл, я могу запустить OpenSSL, чтобы преобразовать ключ в формат PKCS # 8 следующим образом:

openssl pkcs8 -topk8 -inform PEM -outform DER \
              -in private_key.pem -out private_key.der -nocrypt

В результате я могу кодировать base64, а затем читать, используя этот бит кода Java / JCA:

byte[] privateKeyBytes = 
           DatatypeConverter.parseBase64Binary(privateKeyDERcontents);
PrivateKey prKey = 
           KeyFactory.getInstance("RSA").
               generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes));

Этот закрытый ключ соответствует открытому ключу, хранящемуся, как и ожидалось, то есть я могу отправиться туда и обратно от открытого текста до зашифрованного текста и обратно.

У меня вопрос: могу ли я как-нибудь напрямую прочитать исходную кодировку PEM?

РЕДАКТИРОВАТ

Вот немного кода, который читает соответствующие строки с помощью BouncyCastle:

if (Security.getProvider("BC") == null) {
    Security.addProvider(new BouncyCastleProvider());
}
PEMReader pemReader = new PEMReader(new StringReader(privateKeyPEM));
KeyPair keyPair = (KeyPair) pemReader.readObject();
PrivateKey key = keyPair.getPrivate();

"PrivateKeyPEM" - это строка в базе данных, закодированная PEM, в противном случае этот пример является автономным. Интересно, что он уже использует объект JCA KeyPair в качестве вывода. Перефразируя мой оригинальный вопрос: могу ли я сделать эквивалент кода выше без зависимости от PEMReader (и, в свою очередь, довольно много других классов BouncyCastle)?

Ответы на вопрос(1)

Ваш ответ на вопрос