Maison >Java >javaDidacticiel >Comment extraire une clé privée RSA d'un fichier de clé privée codé PEM BASE64 en Java ?

Comment extraire une clé privée RSA d'un fichier de clé privée codé PEM BASE64 en Java ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-11 01:26:02604parcourir

How to Extract an RSA Private Key from a PEM BASE64 Encoded Private Key File in Java?

Obtention de la clé privée RSA à partir d'un fichier de clé privée encodé PEM BASE64

Dans certains scénarios, vous pouvez rencontrer le besoin d'extraire la clé privée RSA à partir d'un fichier de clé privée codé en PEM BASE64. Les fonctionnalités intégrées de Java peuvent entraîner une erreur « InvalidKeySpecException » lors de la tentative de décodage de la clé. Pour résoudre ce problème, suivez les étapes suivantes :

1. Comprendre les formats PKCS :

Il existe deux formats PKCS courants pour les clés privées : PKCS#1 et PKCS#8. PKCS#1 est plus ancien et représenté par l'extension de fichier « .pem », tandis que PKCS#8 est plus récent et utilise généralement l'extension « .key ».

2. Identifiez le format PEM du fichier de clé :

Examinez le contenu du fichier de clé privée. S'il commence par "-----BEGIN PRIVATE KEY-----" et se termine par "-----END PRIVATE KEY-----", il est au format PKCS#8. S'il commence par "-----BEGIN RSA PRIVATE KEY-----" et se termine par "-----END RSA PRIVATE KEY-----", il est au format PKCS#1.

3. Sélectionnez le code Java approprié :

En fonction du format de votre fichier de clé privée, utilisez l'extrait de code correspondant fourni :

Pour le format PKCS#8 :

byte[] pkcs8EncodedKey = Base64.getDecoder().decode(privateKeyPem);

KeyFactory factory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = factory.generatePrivate(new PKCS8EncodedKeySpec(pkcs8EncodedKey));

Pour le format PKCS#1 :

DerInputStream derReader = new DerInputStream(Base64.getDecoder().decode(privateKeyPem));
DerValue[] seq = derReader.getSequence(0);
BigInteger modulus = seq[1].getBigInteger();
BigInteger publicExp = seq[2].getBigInteger();
BigInteger privateExp = seq[3].getBigInteger();
// ... Continue extracting the remaining components and construct the RSAPrivateCrtKeySpec

KeyFactory factory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = factory.generatePrivate(keySpec);

En suivant ces étapes et en utilisant l'extrait de code Java approprié, vous pouvez obtenir avec succès la clé privée RSA de un fichier de clé privée codé PEM BASE64 et utilisez-le pour vos besoins spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn