Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Sécurité

Sécurité Vos questions sur la sécurité sous Linux/Unix

Réponse
 
Outils de la discussion
Vieux 02/09/2008, 16h12   #1 (permalink)
Invité de passage
 
Date d'inscription: septembre 2008
Messages: 6
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.
tom5040 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/09/2008, 09h37   #2 (permalink)
Membre éprouvé
 
Avatar de KindPlayer
 
Date d'inscription: février 2007
Messages: 451
Par défaut

Tu peux mettre un peu de code?
__________________
La science est ce que nous comprenons suffisamment bien pour l'expliquer à un ordinateur. L'art, c'est tout ce que nous faisons d'autre.
Donald E. Knuth
KindPlayer est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/09/2008, 09h47   #3 (permalink)
Invité de passage
 
Date d'inscription: septembre 2008
Messages: 6
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 :
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.
tom5040 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/09/2008, 11h43   #4 (permalink)
Membre éprouvé
 
Avatar de KindPlayer
 
Date d'inscription: février 2007
Messages: 451
Par défaut

apparemment ça serait quand tu fais
Code :
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.
__________________
La science est ce que nous comprenons suffisamment bien pour l'expliquer à un ordinateur. L'art, c'est tout ce que nous faisons d'autre.
Donald E. Knuth
KindPlayer est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Sécurité



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement 00h32.


Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter
Copyright 2000-2008 www.developpez.com - Legal informations