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

Java Discussion :

Java et chiffrement de fichiers


Sujet :

Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Java et chiffrement de fichiers
    Bonsoir !
    Permettez-moi de vous exposer mon petit problème. Je souhaite réaliser en Java une application permettant le chiffrement et le déchiffrement de fichier par l’intermédiaire de 7ZIP qui utilise un chiffrement AES 256 bits. Grosso modo mon programme ressemble à cela :

    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
     
    public class Main {
     
    	private static String CLE = "p80ZaXN4Uy8hEARLjLx01D4KK6EEVYSWdd8RY7XkHoE=";
     
    	/**
             * @param args[0] : 1-> Chiffrer 2-> Déchiffrer
             * @param args[1] : Nom du fichier à chiffrer - déchiffrer
             */
    	public static void main(String[] args) {
     
    		if (args[0].equals("1")) { chiffrer(args[1]); }
     
    		else if (args[0].equals("2")) { dechiffrer(args[1]); } 
     
    	}
     
    	/**
             * Chiffrer un fichier avec la clé AES 256 bits
             * @param nomFichier : Nom du fichier à chiffrer
             */
    	private static void chiffrer(String nomFichier) {
     
    		// Appel à 7ZIP avec la clé pour chiffrer un fichier
     
    	}
     
     
    	/**
             * Dechiffrer un fichier avec la clé AES 256 bits
             * @param nomFichier : Nom du fichier à déchiffrer
             */
    	private static void dechiffrer(String nomFichier) {
     
    		// Appel à 7ZIP avec la clé pour déchiffrer un fichier
     
     
    	}
     
    }
    De ce fait, j’utilise une clé spécifiée en dur dans mon programme afin d’assurer le chiffrement et le déchiffrement de fichiers.
    Le problème, c’est qu’une fois compilé en format « .jar », il est très facile de retrouver la variable « CLE » juste en décompressant le « .jar » et en observant le fichier Main.class avec un simple éditeur de texte. J’ai voulu utiliser un offuscateur de code mais sans succès, la clé apparaît toujours en dur dans le « .class ».

    Mes questions sont donc :

    Comment est-il possible de « dissimuler » efficacement la variable « CLE » de mon programme afin de rendre sa récupération plus difficile lors de reverse engineering sur le fichier « .class » ?

    De même existe-t-il une meilleure pratique que de spécifier directement la valeur de la clé dans le fichier .jar ?

    Java intègre t'il nativement des fonctions de chiffrement AES ? (Pour éviter de passer par 7ZIP ?)


    Merci !!

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 250
    Points : 403
    Points
    403
    Par défaut
    Java gère le cryptage via la classe javax.crypto.Cipher, pas besoin de programme tierce comme P7Zip.
    Quant à l'externalisation de la clef, tu as plusieurs techniques possibles, cela dépend de ton contexte d'utilisation.
    Tu peux par exemple externaliser le stockage de la clef dans un keystore java.
    Dans la méthode main, tu peux par exemple passer comme arguments le chemin vers le keystore, le mot de passe du keysyore, l'alias de la clef et le mot de passe de la clef, comme ça tu ne stockes dans ton programme aucune info de sécurité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    final String ksPath = args[0] /*Chemin vers le fichier keystore (jks)-*/
     
    Cipher cipher = Cipher.getInstance("AES");
    KeyStore ks = KeyStore.getInstance("JCEKS", "SunJCE");
    FileInputStream kis = new FileInputStream(ksPath);  //Chargement du keystore
    ks.load(kis, "Mot de passe du keystore"); // args[1]
    //chargement de la clef AES
    SecretKey skey = (SecretKey) ks.getKey("nom de la clef", "mot de passe de la clef"); // args[2] args[3]
    cipher.init(Cipher.ENCRYPT_MODE, skey); // Initialisation en mode cryptage
    Un exemple simple d'utilisation, lecture d'un fichier en clair et création de sa version cryptée.

    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
     
    FileInputStream fis = new FileInputStream(new File("fichier_en_clair.txt"));
    FileOutputStream fos = new FileOutputStream("fichier_crypte");
    CipherOutputStream cos = new CipherOutputStream(fos, cipher);
    BufferedInputStream bis = new BufferedInputStream(fis);
    int readFlag = 0;
    byte[] b = new byte[64];
    try {
    while ((readFlag = bis.read(b)) >= 0) {
       cos.write(b);
    }
    } finally {
      cos.close();
      bis.close();
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Merci pour cette réponse rapide, j'y vois à présent beaucoup plus clair !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [xml][Java] Comment valider un fichier XML?
    Par ederf dans le forum Valider
    Réponses: 1
    Dernier message: 06/03/2006, 15h51
  2. [ java.net ] récupérer un fichier PDF à partir d'une URL
    Par nico2280 dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 10/11/2005, 11h09
  3. Applet java et upload de fichier
    Par qoqox dans le forum Applets
    Réponses: 1
    Dernier message: 26/10/2005, 10h30
  4. [DOM] [JAVA + XML] Ouvrir un fichier xml à partir d'une url
    Par Hell dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 09/06/2005, 00h06
  5. [java][Oracle]Ouvrir un fichier(blob) avec le browser
    Par marsup54 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 11/09/2003, 13h35

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