Cryptage

foufou20071987
Messages postés
14
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
16584
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 août 2022
- 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
16584
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 août 2022
124
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
15277
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
26 juillet 2022
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