Cryptage

foufou20071987 Messages postés 13 Date d'inscription mercredi 18 mai 2011 Statut Membre Dernière intervention 9 novembre 2013 - Modifié par BunoCS le 10/11/2013 à 11:14
KX Messages postés 16740 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 mai 2024 - 10 nov. 2013 à 12:51
Bonsoir, j'arrive pas a enregistrer la clé de cryptage dans un fichier pour séparer les deux fonctions de cryptage et décryptage.Pouvez vous m'aider?Merci d'avance.

package application.pkgfinal;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.io.*;
import java.lang.String;

class CryptAES{
    public static void main(String[] args) throws Exception 
    {
        long startTime = System.currentTimeMillis();
        KeyGenerator key = KeyGenerator.getInstance("AES");
        key.init(256);
        SecretKey s = key.generateKey();
        byte[] raw = s.getEncoded();
        SecretKeySpec skey= new SecretKeySpec(raw, "AES");
        Cipher c = Cipher.getInstance("AES");
        c.init(Cipher.ENCRYPT_MODE, skey);

        String fichier = "5G.txt";
        try{
            InputStream ips=new FileInputStream(fichier); 
            InputStreamReader ipsr=new InputStreamReader(ips);
            BufferedReader br=new BufferedReader(ipsr);
            String ligne;
            FileWriter fw = new FileWriter ("creptedAES.txt",true);
            BufferedWriter bw = new BufferedWriter (fw);
            PrintWriter fichierSortie = new PrintWriter (bw); 
            while ((ligne=br.readLine())!=null){
                byte[] encrypted =c.doFinal(ligne.getBytes());
                fichierSortie.println (asHex(encrypted)); 
            }
            br.close(); 
            fichierSortie.close();
            System.out.println("Le fichier crypté a été créé!"); 
        }
        catch (Exception e){
            System.out.println(e.toString());
        }
        long endTime = System.currentTimeMillis();
        Long t= endTime-startTime;
        System.out.println("temps du cryptage :"+t );
        Long a= System.currentTimeMillis();

        try{
            c.init(Cipher.DECRYPT_MODE, skey);
            InputStream ips=new FileInputStream("creptedAES.txt"); 
            InputStreamReader ipsr=new InputStreamReader(ips);
            BufferedReader br=new BufferedReader(ipsr);
            String ligne;
            FileWriter fw = new FileWriter ("decreptedAES.txt",true);
            BufferedWriter bw = new BufferedWriter (fw);
            PrintWriter fichierSortie = new PrintWriter (bw); 
            while ((ligne=br.readLine())!=null){
                byte[]dec = c.doFinal(fromHexString(ligne));
                fichierSortie.println (new String(dec)); 
            }
            br.close(); 
            fichierSortie.close();
            System.out.println("Le fichier decrypté a été créé!"); 
        }
        catch (Exception e){
            System.out.println(e.toString());
        }

        Long f= System.currentTimeMillis();
        System.out.println("temps du décryptage :"+(f-a));
    }

    public static byte[] fromHexString(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16));
        }
        return data;
    }

    public static String lireString(){//lecture d'une chaine 
        String ligne_lue=null; 
        try{ 
            InputStreamReader lecteur=new InputStreamReader(System.in); 
            BufferedReader entree=new BufferedReader(lecteur); 
            ligne_lue=entree.readLine(); 
        } 
        catch(IOException err){ 
            System.exit(0); 
        } 
        return ligne_lue; 
    } 

    public static String asHex(byte buf[])
    {
        StringBuffer strbuf = new StringBuffer(buf.length * 2);
        for(int i=0; i< buf.length; i++)
        {
            if(((int) buf[i] & 0xff) < 0x10)
                strbuf.append("0");
            strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
        }
        return strbuf.toString();
    }
}


--

2 réponses

KX Messages postés 16740 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 mai 2024 127
10 nov. 2013 à 12:51
Pourquoi faire simple quand on peut faire compliqué...

Ton code d'écriture de fichier tu l'utilises deux fois, pourquoi en avoir fait un copier coller quand une petite méthode permettait d'aérer ton code ? De plus il y a plus simple qu'imbriquer trois Reader et Writer les uns dans les autres, un seul suffit...

Cependant je ne vois pas l'intérêt de manipuler toi même le fichier. Ton cryptage ne sera AES que si tu le considères comme tel du début à la fin, si tu prends juste AES sur chaque ligne qu'après tu le bidouilles en hexadécimale, etc. Ce ne sera plus du cryptage AES.
Du coup il sera plus facile de deviner la clé secrète (et donc décrypter le fichier) car au lieu d'avoir un gros bloc crypté on aura plein de petits blocs cryptés avec la même clé !!!

Pour en revenir à ton problème, il suffit juste de prendre ta variable "raw" et l'écrire dans un fichier comme tu as pu le faire pour le reste.
1
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
10 nov. 2013 à 11:16
Hello,
Je ne comprends pas. J'ai regardé rapidement et tu créé bien un fichier avec le contenu crypté, non?
Où est le souci?

Note: j'ai édité ton code afin de corriger les balises code. Merci d'y faire attention la prochaine fois ;)
0
Rejoignez-nous