2015-10-28 1 views
0

J'ai un problème que j'espère que quelqu'un pourra m'aider.Erreur lors du chiffrement des données à l'aide du chiffrement

Je souhaite charger une clé publique (fichier .cer) dans un magasin de clés, puis utiliser cette clé pour crypter certaines données.

La clé semble être correctement chargée dans le fichier de clés, car je peux voir son contenu à l'aide de la méthode keystore.getCertificate(alias).

Cependant, lorsque je tente ensuite d'utiliser cette clé pour chiffrer une donnée, je reçois l'erreur suivante apparaît:

Exception dans le thread « principal » java.security.InvalidKeyException: type de clé non pris en charge: null à sun.security.mscapi.RSACipher.engineGetKeySize (RSACipher.java:404)

Voici mon code:

String alias = "alias"; 

//Create keystore 
KeyStore ksName = KeyStore.getInstance(KeyStore.getDefaultType()); 

//Make an empty store 
ksName.load(null); 

// insert .cer file path here 
FileInputStream fis = new FileInputStream("C:\\cert\\certificate.cer"); 
BufferedInputStream bis = new BufferedInputStream(fis); 

CertificateFactory cf = CertificateFactory.getInstance("X.509"); 

while (bis.available() > 0) 
{ 
    java.security.cert.Certificate cert = cf.generateCertificate(bis); 
    ksName.setCertificateEntry(alias, cert); 
}   

// retrieve public key from keystore 
PublicKey pubKey = (PublicKey) ksName.getKey(alias, null); 

String data = "... data to be encrypted ...."; 
String alg = "RSA/ECB/PKCS1Padding"; 
Cipher cipher = Cipher.getInstance(alg); 
cipher.init(Cipher.ENCRYPT_MODE, pubKey); 
byte encryptedBytes[] = cipher.doFinal(data.getBytes()); 

Je ne sais pas pourquoi je reçois ce err ou.

+0

Ive a réussi à comprendre le problème sur. Fondamentalement, je faisais la récupération du certificat du magasin de clés incorrectement. Le code aurait dû être: java.security.cert.Certificate pubCert = ksName.getCertificate (alias); Au lieu de: PublicKey pubKey = (PublicKey) ksName.getKey (alias, null); Salutations –

+0

Je ne savais pas que vous pouviez le faire - merci Artjom –

Répondre

0

J'ai réussi à comprendre le problème. Fondamentalement, je faisais la récupération du certificat du magasin de clés incorrectement. Le code aurait dû être:

java.security.cert.Certificate pubCert = ksName.getCertificate(alias); 

Au lieu de:

PublicKey pubKey = (PublicKey) ksName.getKey(alias, null);