Как расшифровать закрытый ключ в Java (без BC openssl)
Возможно ли расшифровать зашифрованные закрытые ключи RSA (или другие, не имеющие значения) с помощью JCE и / или поставщика BouncyCastle (не используя пакет openssl)?
Я могу читать незашифрованные ключи просто отлично, используя PrivateKeyFactory.
Поискивая это, дают мне примеры использования PEMReader (из пакета BC openssl), к которому применен пароль, но - я не хочу использовать пакет openssl, не обязательно хочу использовать формат PEM, и я могу декодировать PEM, используя PemReader (из комплекта провайдера). Это то, что я могу сделать с этим потом, вопрос.
Я ищу какую-то мега-функцию или ее серию, которая может это сделать, то есть я не собираюсь анализировать ASN1 зашифрованного ключа, выяснять метод шифрования, передавать ввод через шифр и т. Д.
1 ответ
Если у вас зашифрованный ключ PKCS#8 в двоичном формате (т.е. не в формате PEM), следующий код показывает, как получить закрытый ключ:
public PrivateKey decryptKey(byte[] pkcs8Data, char[] password) throws Exception {
PBEKeySpec pbeSpec = new PBEKeySpec(password);
EncryptedPrivateKeyInfo pkinfo = new EncryptedPrivateKeyInfo(pkcs8Data);
SecretKeyFactory skf = SecretKeyFactory.getInstance(pkinfo.getAlgName());
Key secret = skf.generateSecret(pbeSpec);
PKCS8EncodedKeySpec keySpec = pkinfo.getKeySpec(secret);
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePrivate(keySpec);
}
Если у вас есть формат PEM, удалите верхний колонтитул (первая строка), нижний колонтитул (последняя строка) и преобразуйте оставшийся контент из base64 в обычный байтовый массив.