Quand utiliser X509EncodedKeySpec vs RSAPublicKeySpec?
J'ai un certificat dans un fichier texte, son contenu ressemble:
-----BEGIN PUBLIC KEY-----
xxxx
xxxx
xxxx
-----END PUBLIC KEY-----
Je crois que c'est un pem certificat codé? Je tiens donc à le charger maintenant, je suis en train suivantes:
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(
readFileToByteArray("keyfile"));
mais j'obtiens une InvalidKeySpecException.
Si je charge le fichier, couper le début/fin de l'en-tête/pied de page, puis en base64 decoder les "xxxx" le contenu, je n'ai pas toutes les plaintes:
String contents = readFileToString("keyfile");
contents = contents.replace("-----BEGIN PUBLIC KEY-----", "");
contents = contents.replace("-----END PUBLIC KEY-----", "");
byte[] prepared = Base64.decode(contents);
//ok.
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(prepared);
est-ce la bonne façon de charger le fichier de clé? Je vois aussi un RSAPublicKeySpec classe, qui, basé sur le nom, semble comme quelque chose que je serais intéressé par ici. Mais je crois que c'est seulement pour la génération des certificats, de ne pas le lire existants?
Grâce
"J'ai un certificat"... non, vous avez une clé publique, et non pas un certificat. Cependant, ce que vous faites pour obtenir une clé de l'instance est correct.
OriginalL'auteur user3203425 | 2014-06-14
Vous devez vous connecter pour publier un commentaire.
Il y a un bon résumé de la commune les principaux formats ici. Comme indiqué par la javadoc X509EncodedKeySpec ce cours est conçu pour convertir entre les SubjectPublicKeyInfo ASN.1 struct qui est dans le X. 509 standard et Java public les principaux formats. Et depuis le premier lien indiqué qu'un fichier de la forme
est en effet un SubjectPublicKeyInfo, vous êtes à analyser correctement le fichier. Il y a une dernière étape vous êtes en manque, et c'est pour convertir votre X509EncodedKeySpec dans une clé publique. C'est la fonction de la KeyFactory classe. Pour étendre votre exemple par deux lignes de plus, il serait
OriginalL'auteur James K Polk
La réponse n'est pas simple. Code suivant fonctionne pour moi lors du chargement de la clé publique RSA de chaîne de caractères (codés au format PEM comme mentionné ci-dessus) pour
java.security.PublicKey
objet. Remarque: les en-têtes et les extrémités doivent être dépouillé à l'avance.Ensuite, le
java.security.PublicKey
instance peut être utilisée pour chiffrer votre chaîne comme suit:Les octets peuvent ensuite être converti en chaîne par:
Base64.encodeToString(ENCRYPTED_YOUR_STRING, Base64.DEFAULT)
La solution est testée sur l'API Android 25 Plate-forme et spongycastle 1.56
OriginalL'auteur user3786340
L'utilisation de cette classe
Remarque: l'utilisation de RSA que par moins de 129 chaîne d'octets.
}
OriginalL'auteur Ali Bagheri