2010-08-12 5 views
2

Je dois lire les fichiers de clés pem pour obtenir la clé publique RSA, puis les utiliser pour chiffrer. Je peux le faire en utilisant openssl et convertir le fichier pem en fichier der. , puis charger ma clé en utilisant X509EncodedKeySpec et PKCS8EncodedKeySpec. Mais je ne veux pas faire cela parce que pem est le format d'échange de clé d'utilisateur. utilisateur peut enregistrer sa propre clé peut comme ceci:Chiffrement RSA: InvalidKeyException: format de clé non valide

--BEGIN PUBLIC KEY-- MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGi0/vKrSIIQMOm4atiw+2s8tSojOKHsWJU3oPTm 

b1a5UQIH7CM3NgtLvUF5DqhsP2jTqgYSsZSl+W2RtqCFTavZTWvmc0UsuK8tTzvnCXETsnpjeL13 

Hul9JIpxZVej7b6KxgyxFAhuz2AGscvCXnepElkVh7oGOqkUKL7gZSD7AgMBAAE= 

--END PUBLIC KEY-- 

et cette clé est stocker dans une base de données dans ce format ...

Voici le code que je l'ai essayé ..

File pubKeyFile=new File("D:/public_key.pem"); 
DataInputStream dis = new DataInputStream(new FileInputStream(pubKeyFile)); 
byte[] pubKeyBytes = new byte[(int)pubKeyFile.length()]; 
dis.readFully(pubKeyBytes); 
dis.close(); 
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
X509EncodedKeySpec pubSpec = new X509EncodedKeySpec(pubKeyBytes); 
RSAPublicKey pubKey = (RSAPublicKey) keyFactory.generatePublic(pubSpec); 

Je reçois comme exception

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format 

comme je suis tout à fait nouveau pour concept de chiffrement s quelqu'un peut-il m'aider s'il vous plaît à résoudre cette exception?

Merci beaucoup.

Répondre

3

Avec bouncycastle, il serait fait de cette façon:

CertificateFactory cf = CertificateFactory.getInstance("X509", "BC"); 
InputStream is = new FileInputStream("D:/public_key.pem"); 
X509Certificate certificate = (X509Certificate) cf.generateCertificate(is); 
is.close(); 
RSAPublicKey pubKey = (RSAPublicKey)certificate.getPublicKey(); 
+0

+1, je pensais que vous deviez utiliser la classe PEMReader, ne savais pas que vous pouvez simplement spécifier le fournisseur de « BC » à CeritificateFactory. –

+0

Oui, mais en fait dans ce cas, utiliser le PEMReader serait plus simple ... –

Questions connexes