Как я могу прочитать 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)?