foufou20071987
Messages postés13Date d'inscriptionmercredi 18 mai 2011StatutMembreDernière intervention 9 novembre 2013
-
Modifié par BunoCS le 10/11/2013 à 11:14
KX
Messages postés16740Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention26 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();
}
}
KX
Messages postés16740Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention26 mai 2024127 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.