Java décryptage
Utilisateur anonyme -
J'espère que vous allez bien ?
je me permets de vous poser cette question afin de m'aider à trouver l'erreur dans mon programme.
Dans la deuxième version de l'application .nous avons abordé la notion de sécurité des images sauvegardées dans le serveur SFTP.
A cet effet , nous avons deux processus :
-À la sauvegarde l'image est cryptée avant l'envoi au serveur ftp.
-A la récupération l'image est décryptée avant la copie dans un répertoire local.
L'algorithme appliqué est celui d'AES , le cryptage fonctionne sans aucun problème.
le problème majeur est le décryptage , j'ai arrivé à récupérer l'image mais toujours crypter
( le programme se bloque au niveau de l'écriture d'image )
public void crypter() { try { FileInputStream file= new FileInputStream(filename); System.out.println(file); FileOutputStream outStream = new FileOutputStream(filename); System.out.println(outStream); String str= "3251510032515100"; byte k[]= str.getBytes(); SecretKeySpec key= new SecretKeySpec(k, "AES"); System.out.println(key); Cipher enc = Cipher.getInstance("AES"); System.out.println(enc); enc.init(Cipher.ENCRYPT_MODE, key); CipherOutputStream cos= new CipherOutputStream(outStream, enc); System.out.println(cos); byte[] buf= new byte[1024]; System.out.println(""); int read; while((read=file.read(buf))!=-1){ cos.write(buf,0,read); } file.close(); outStream.flush(); cos.close(); System.out.println("The image was successfully encrypted"); // JOptionPane.showMessageDialog(null, "The image was successfully encrypted"); } catch (FileNotFoundException ex) { ex.getMessage(); }catch (Throwable exception2) { exception2.printStackTrace(); } } public void decrypt() { try{ JSch jsch = new JSch(); Session session = null; int port = Integer.parseInt(port_FTP); session = jsch.getSession(user_FTP, Hote_FTP, port); session.setConfig("StrictHostKeyChecking", "no"); session.setPassword(pwd_FTP); session.connect(); Channel channel = session.openChannel("sftp"); channel.connect(); ChannelSftp sftpChannel = (ChannelSftp) channel; Vector<ChannelSftp.LsEntry> list = sftpChannel.ls(chemin_ftp); System.out.println(list); for(ChannelSftp.LsEntry entry:list) { System.out.println("sftp:"+entry.getFilename()); System.out.println("code:"+Recherche.getText()+".jpg"); if(entry.getFilename().contains(Recherche.getText()+".jpg")) { FileInputStream file = new FileInputStream(chemin_ftp+"/"+Recherche.getText()+".jpg"); FileOutputStream outStream = new FileOutputStream(new_path+"/"+Recherche.getText()+".jpg"); byte k[]= "3251510032515100".getBytes(); SecretKeySpec key = new SecretKeySpec(k, "AES"); Cipher enc = Cipher.getInstance("AES"); enc.init(Cipher.DECRYPT_MODE, key); CipherOutputStream cos = new CipherOutputStream(outStream, enc); byte[] buf = new byte[1024]; int read; while((read=file.read(buf))!=-1){ cos.write(buf,0,read); } file.close(); outStream.flush(); cos.close(); JOptionPane.showMessageDialog(null, "The image was decrypted successfully"); Runtime.getRuntime().exec("rundll32 url.dll, FileProtocolHandler "+"Decrypt.jpg"); } } JOptionPane.showMessageDialog(null,"Le spécimen signature n'existe pas"); }catch(Exception e){ JOptionPane.showMessageDialog(null, e); } } // rechercher private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { try { File directory = new File(new_path); if(!directory.exists()) { directory.mkdir(); } JSch jsch = new JSch(); Session session = null; int port = Integer.parseInt(port_FTP); session = jsch.getSession(user_FTP, Hote_FTP, port); session.setConfig("StrictHostKeyChecking", "no"); session.setPassword(pwd_FTP); session.connect(); Channel channel = session.openChannel("sftp"); channel.connect(); ChannelSftp sftpChannel = (ChannelSftp) channel; // String files = sftpChannel.ls(chemin_ftp).toString(); // System.out.println(files.length()); // String[] files = directory.list(); // System.out.println(files.length); if((!Recherche.getText().isEmpty()) && test1==false || (Recherche.getText().substring(0, 5).equals(Agence.substring(0,5)))) { System.out.println("debut"); test1=true; Vector path = sftpChannel.ls(chemin_ftp); System.out.println(path); // for(int i = 0; i < files.length; i++) // { System.out.println("debut 2"); if (!path.contains(Recherche.getText())) // if(files[i].toString().substring(0, 21).equals(Recherche.getText()) && test1==true) { System.out.println("ok1 " +path.get(0).toString()); System.out.println("ok2 " +Recherche.getText()); // System.out.println(code); remotefile =chemin_ftp+"/"+Recherche.getText()+".jpg"; System.out.println("5555"+remotefile); // decrypt(); sftpChannel.get(remotefile,new_path+"/"+Recherche.getText()+".jpg"); decrypt(); System.out.println("fin"); flag=1; System.out.println(flag); System.out.println("successefully upload"); ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// ImageIcon icon = new ImageIcon((String) new_path+"/"+Recherche.getText()+".jpg"); Image image = icon.getImage().getScaledInstance(lb1_Image.getWidth(),lb1_Image.getHeight(), Image.SCALE_SMOOTH); lb1_Image.setIcon(new ImageIcon(image)); /////////////////////////////FIN///////////////////////// client2=Recherche.getText().substring(6); System.out.println("client2"+client2); client=client2; System.out.println("client"+client); jTextField1.setText(client); getClient(); getncpnbre(); } if(flag==0) { lb1_Image.setIcon(new ImageIcon()); JOptionPane.showMessageDialog(null,"Le spécimen signature n'existe pas"); } } else { test1=false; lb1_Image.setIcon(new ImageIcon()); JOptionPane.showMessageDialog(null,"Veuillez saisir un code spécimen valide"); } sftpChannel.exit(); session.disconnect(); } catch (Exception e) { e.getMessage(); } }
Je reste à votre disposition pour toutes informations complémentaires.
Cordialement
- Java décryptage
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
1 réponse
Voici comment je pourrais réécrire votre code de décryptage :
public void decrypt() {
try {
// Ouvrir le fichier à décrypter en lecture
FileInputStream inStream = new FileInputStream(filename);
// Ouvrir le fichier de sortie en écriture
FileOutputStream outStream = new FileOutputStream(filename);
// Charger la clé en utilisant la chaîne de caractères spécifiée
String keyString = "3251510032515100";
byte[] key = keyString.getBytes();
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
// Initialiser le chiffreur en mode décryptage
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
// Utiliser le chiffreur pour décrypter les données du fichier d'entrée et les écrire dans le fichier de sortie
CipherOutputStream cipherOut = new CipherOutputStream(outStream, cipher);
byte[] buffer = new byte[1024];
int numRead;
while ((numRead = inStream.read(buffer)) >= 0) {
cipherOut.write(buffer, 0, numRead);
}
// Fermer tous les flux de fichiers
inStream.close();
cipherOut.close();
outStream.close();
} catch (Exception e) {
// Traiter l'exception si elle se produit
e.printStackTrace();
}
}
Voici ce que j'ai fait :
- J'ai enlevé les appels inutiles à la méthode getInstance() et aux constructeurs de FileInputStream et FileOutputStream, car ces objets sont déjà créés plus haut dans le code.
- J'ai ajouté une chaîne de caractères contenant la clé de cryptage au début de la méthode, au lieu de la définir dans la méthode crypter(). Cela permet de réutiliser la même clé pour la cryptage et la décryptage.
- J'ai enlevé les appels à la méthode showMessageDialog(), car elle n'est pas utilisée dans le code de décryptage.
Je vous recommande également de traiter les exceptions et de fermer tous les flux de fichiers et les sessions de canal dans une clause finally, afin de s'assurer qu'ils seront fermés même en cas d'exception.
public void decrypt() {
try {
// Ouvrir le fichier à décrypter en lecture
FileInputStream inStream = new FileInputStream(filename);
// Ouvrir le fichier de sortie en écriture
FileOutputStream outStream = new FileOutputStream(filename);
// Charger la clé en utilisant la chaîne de caractères spécifiée
String keyString = "32515
1510032515100";
byte[] key = keyString.getBytes();
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
// Initialiser le chiffreur en mode décryptage
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
// Utiliser le chiffreur pour décrypter les données du fichier d'entrée et les écrire dans le fichier de sortie
CipherOutputStream cipherOut = new CipherOutputStream(outStream, cipher);
byte[] buffer = new byte[1024];
int numRead;
while ((numRead = inStream.read(buffer)) >= 0) {
cipherOut.write(buffer, 0, numRead);
}
} catch (Exception e) {
// Traiter l'exception si elle se produit
e.printStackTrace();
} finally {
// Fermer tous les flux de fichiers et les sessions de canal
try {
inStream.close();
cipherOut.close();
outStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Je vous recommande également de vérifier que les objets inStream, cipherOut et outStream sont bien initialisés avant de les fermer dans la clause finally. Vous pouvez par exemple les déclarer en dehors de la clause try, comme ceci :
FileInputStream inStream = null;
CipherOutputStream cipherOut = null;
FileOutputStream outStream = null;
try {
// Ouvrir le fichier à décrypter en lecture
inStream = new FileInputStream(filename);
// Ouvrir le fichier de sortie en écriture
outStream = new FileOutputStream(filename);
// Charger la clé en utilisant la chaîne de caractères spécifiée
String keyString = "3251510032515100";
byte[] key = keyString.getBytes();
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
// Initialiser le chiffreur en mode décryptage
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
// Utiliser le chiffreur pour décrypter les données du fichier d'entrée et les écrire dans le fichier de sortie
cipherOut = new CipherOutputStream(outStream, cipher);
byte[] buffer = new byte[1024];
int numRead;
while ((numRead = inStream.read(buffer)) >= 0) {
cipherOut.write(buffer, 0, numRead);
}
} catch (Exception e) {
// Traiter l'exception si elle se produit
e.printStackTrace();
} finally {
// Fermer tous les flux de fichiers et les sessions de canal si nécessaire
try {
if (inStream != null) {
inStream.close();
}
if (cipherOut != null) {
cipherOut.close();
}
if (outStream != null) {
outStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Je vous recommande également de vérifier que le fichier à décrypter existe bien et est accessible en lecture avant d'essayer de l'ouvrir en utilisant la méthode exists() de la classe File.
File file = new File(filename);
if (!file.exists() || !file.isFile()) {
throw new IOException("Le fichier " + filename + " n'existe pas ou n'est pas accessible en lecture");
}
// Ouvrir le fichier à décrypter en lecture
FileInputStream inStream = new FileInputStream(file);
J'espère que ça peut t'aider.
10 mois après y'a aucune chance.
Exhumer des vieux sujets est contraire à la charte d'utilisation que tu as accepté de respecter pas plus tard qu'aujourd'hui.
De même que faire le travail des autres à leur place. Ce qu'il faut faire ici, c'est orienter, aiguiller, afin que le demandeur trouve lui-même.
Je te conseille donc de respecter un peu mieux la charte, car se faire remarquer dès son premier jour ne présage pas d'un avenir radieux au sein de la communauté.
Dernier point, pour poster un code, il faut faire comme décrit là https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code