IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Discussion :

Cryptage RSA sous unix


Sujet :

Sécurité

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Cryptage RSA sous unix
    Bonjour,
    Je voudrais crypté tous les fichiers d'un dossier avec l'algorithme de cryptage RSA et ensuite les envoyé par mail.
    Pour cela j'ai codé un programme java qui liste tous les fichiers d'un dossier et qui les crypte en utilisant un certificat de securité portant l'extension .pfx et pour finir qui les envoi par mail en piece jointe.

    Sous windows tout est OK, le souci est que lorsque je veux utiliser ce meme java sous unix (avec le meme certificat de sécurité) cela ne marche pas.

    Voici l'erreur :
    java.lang.IllegalArgumentException: not an RSA key!
    at org.bouncycastle.jce.provider.JCERSACipher.engineGetKeySize(UnknownSource)
    at javax.crypto.Cipher.init(Unknown Source)



    J'aurais voulu savoir si unix était capable de gérer de tel certificat de cryptage. Si oui y a t-il des modifications à faire au niveau de unix ou du programme java ?

    Merci de votre aide.

  2. #2
    Membre confirmé Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Points : 477
    Points
    477
    Par défaut
    Tu peux mettre un peu de code?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour voici la méthode pour initialiser le fichier *.pfx (clé publique, clé privée, certificat) ainsi que la méthode pour crypté un fichier passé en paramètres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    public  static boolean	init(String certificat)
    {
    	try  {
    		ks = KeyStore.getInstance("PKCS12");
    		// Password pour le fichier *.pfx
    		password = "*****".toCharArray();
    		ks.load(new FileInputStream(certificat), password);
    	      } 
    	catch (Exception e) 
                 {
    		System.out.println("Erreur: fichier "+certificat+" n'est pas un fichier pkcs#12 valide ou passphrase incorrect");
    		return false;
    	     }
     
    	//RECUPERATION DU COUPLE CLE PRIVEE/PUBLIQUE ET DU CERTIFICAT PUBLIQUE
    	try {
    		Enumeration en = ks.aliases();
    		String ALIAS = "";
    		Vector vectaliases = new Vector();
     
    		while (en.hasMoreElements())
    		vectaliases.add(en.nextElement());
    		String[] aliases = (String []) (vectaliases.toArray(new String[0]));
    		for (int i = 0; i < aliases.length; i++)
    			if (ks.isKeyEntry(aliases[i]))
    			{
    				ALIAS = aliases[i];
    				break;
    			}
    		privatekey 	= (PrivateKey)ks.getKey(ALIAS, password);
    		cert 		= (X509Certificate)ks.getCertificate(ALIAS);
    		publickey 	= ks.getCertificate(ALIAS).getPublicKey();
     
    	     }
            catch (Exception e) 
    	{
    		e.printStackTrace();
     
    	}	
    return true;
    }
     
     
    public  static void cryptage(String fichierACrypte, String fichierCrypte)
    {
    	try 
    	{
    		 // Chargement du fichier à chiffrer
    	byte[] buffer = ouvrirFichier(fichierACrypte);
    	Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
     
            //------------------------------------------------------------------//
            // Chiffrement du document
            //------------------------------------------------------------------//
     
            // publickey est la cle publique du destinataire
            cipher.init(Cipher.ENCRYPT_MODE, publickey, new SecureRandom("aaa".getBytes()));
    	    int blockSize = cipher.getBlockSize();
    	    int outputSize = cipher.getOutputSize(buffer.length);
    	    int leavedSize = buffer.length % blockSize;
    	    int blocksSize = leavedSize != 0 ?
    	    buffer.length / blockSize + 1 : buffer.length / blockSize;
    	    byte[] raw = new byte[outputSize * blocksSize];
    	    int i = 0;
     
            while (buffer.length - i * blockSize > 0)
            {
                    if (buffer.length - i * blockSize > blockSize)
                        cipher.doFinal(buffer, i * blockSize, blockSize, raw, i * outputSize);
                    else
                        cipher.doFinal(buffer, i * blockSize, buffer.length - i * blockSize, raw, i * outputSize);
                    i++;
            }       
            sauverFichier(fichierCrypte, raw);
            System.out.println("Fichier "+fichierACrypte+" crypte avec succes");
    		}
    	catch (Exception e) 
    	{
           e.printStackTrace();
    	}		
    }

    Merci de votre aide.

  4. #4
    Membre confirmé Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Points : 477
    Points
    477
    Par défaut
    apparemment ça serait quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cipher.init(Cipher.ENCRYPT_MODE, publickey, new SecureRandom("aaa".getBytes()));
    publickey n'est pas reconnu comme étant une clé RSA. Quand tu fais ton cast en meme temps que tu récupères clés et certificat de ton keystore, tu devrais peut-etre caster en RSAPublicKey le retour de getPublicKey. Et sinon t'es sur que c'est une clé RSA?
    Apres avoir fait cette modif trace un publickey.getClass(); pour voir ce qu'il en est réellement.

Discussions similaires

  1. Cryptage rsa sous Delphi
    Par hocine77 dans le forum Langage
    Réponses: 5
    Dernier message: 27/12/2010, 18h30
  2. cryptage script shell sous unix
    Par dimitris dans le forum Autres systèmes
    Réponses: 0
    Dernier message: 13/07/2010, 08h01
  3. Cryptage RSA sous unix
    Par tom5040 dans le forum Sécurité
    Réponses: 6
    Dernier message: 03/09/2008, 10h58
  4. cryptage avec RSA sous visual C++
    Par ryoussef19 dans le forum VC++ .NET
    Réponses: 17
    Dernier message: 30/05/2007, 10h10
  5. cryptage d'un fichier sous UNIX
    Par medora dans le forum Linux
    Réponses: 5
    Dernier message: 13/04/2007, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo