2012-09-11 2 views
1

Bonjour J'essaie de déchiffrer un fichier qui est chiffré avec la clé publique RSA. J'ai une clé privée RSA de 3072 bits correspondant à pubkey. Le fichier contient les octets bruts d'un codage PKCS8 de la clé. que j'ai dans un tableau d'octets rsa_priv.Comment créer une instance RSAPrivateKey à partir d'un tableau d'octets?

public void decrypt() 
{ 
try 
{ 
    SecretKeySpec sk=new SecretKeySpec(rsa_priv,"RSA/EBC/PKCS8"); 
    Cipher dec = Cipher.getInstance("RSA"); 
    dec.init(Cipher.DECRYPT_MODE, sk,new IvParameterSpec(iv)); 
    //OAEPWithSHA-512AndMGF1Padding   
    byte temp[]; 
    temp=dec.doFinal(sess); 
    String t=temp.toString(); 
    System.out.println("Session key is:"+ t); 
    //session=dec(sess,rsa_priv);OAEPWithSHA-256AndMGF1Padding 
} 
catch (Exception e) 
{ 
    System.out.println("Exception occured:"+ e); 
} 
} 

quand je lance ce code que je reçois les éléments suivants

Exception occured:java.security.InvalidKeyException: No installed provider 
supports this key: javax.crypto.spec.SecretKeySpec 

J'ai importé ces

import java.io.*; 
import javax.crypto.*; 
import javax.crypto.spec.IvParameterSpec; 
import javax.crypto.spec.SecretKeySpec; 
import javax.crypto.KeyGenerator; 
import java.security.*; 
import javax.crypto.SecretKey; 
import javax.crypto.spec.OAEPParameterSpec; 

quelqu'un s'il vous plaît aidez-moi

+0

Bienvenue nouvel utilisateur! N'oubliez pas de regarder les changements apportés par Jeremy D. S'il vous plaît faites un suivi sur votre question et n'oubliez pas d'accepter l'une des réponses qui résout votre problème. –

Répondre

0

Vous devriez vraiment copier juste et coller le erreur dans Google avant de l'afficher ici.

This résout probablement votre problème.

Fondamentalement, vous avez besoin d'une méthode init() définissant le fournisseur comme décrit dans le lien.

/** 
* Init java security to add BouncyCastle as an RSA provider 
*/ 
public static void init() { 
    Security.addProvider(new BouncyCastleProvider()); 
} 

Pour cela, vous devrez importer le BouncyCastle library.

+0

Veuillez ajouter la partie pertinente de l'article lié à votre réponse. Ne publiez pas seulement des liens. –

+0

Vous n'avez pas besoin de BC pour le support RSA. – erickson

3

vous avez présumant que le codage interne (tel que fourni par RSAPrivateKey.getEncoded()) et non un PKCS # 8 réelle chiffré clé privée RSA:

PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(rsa_priv); 
KeyFactory rsaFact = KeyFactory.getInstance("RSA"); 
RSAPrivateKey key = (RSAPrivateKey) rsaFact.generatePrivate(spec); 
Questions connexes