Java et le cryptage

Signaler
Messages postés
35
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
16 septembre 2006
-
Messages postés
7
Date d'inscription
dimanche 16 avril 2006
Statut
Membre
Dernière intervention
1 mai 2006
-
salut tout le monde
je suis en train de développer un prog de cryptage et décrypt des fichiers texte avec l'algo DES, ça marche bien mais parfois qd je veux décrypter un texte,de temps en temps qq caractères bizarres s'affichent au lieu de vrais caractère
je ne sais ps c'est du à koi
si vous avez une idée, merci de me la faire connaitre
A voir également:

7 réponses

Messages postés
35
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
16 septembre 2006

voila le code



import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.NoSuchPaddingException;

import javax.crypto.IllegalBlockSizeException;

import javax.crypto.BadPaddingException;

import java.security.Key;

import java.security.Security;

import java.security.NoSuchAlgorithmException;

import java.security.InvalidKeyException;

import javax.swing.*;

import java.io.*;



class cryptage {



public String crypter(String txt) throws Exception

{



KeyGenerator kg = KeyGenerator.getInstance("DES");

Key key = kg.generateKey();

///enregistrer la clé

FileOutputStream out = new FileOutputStream("fichier.dat");

ObjectOutputStream s = new ObjectOutputStream(out);

s.writeObject(key);

s.flush();

out.close();

//crypter

Cipher cipher = Cipher.getInstance("DES");

byte[] data = txt.getBytes();

cipher.init(Cipher.ENCRYPT_MODE, key);

byte[] result = cipher.doFinal(data);

return new String(result);



}



public String decrypter(String txt) throws Exception

{



FileInputStream in = new FileInputStream("fichier.dat");

ObjectInputStream s = new ObjectInputStream(in);

Key key = (Key) s.readObject();

in.close();

Cipher cipher = Cipher.getInstance("DES");

cipher.init(Cipher.DECRYPT_MODE, key);

byte[] texte = txt.getBytes();

byte[] original = cipher.doFinal(texte);

return new String(original);

}



}

public class essai{



public static void main(String[] args) throws Exception{

Security.addProvider(new com.sun.crypto.provider.SunJCE());

cryptage e = new cryptage();

String texte;

String result;

texte = JOptionPane.showInputDialog("Entrez le texte :");

result=e.crypter(texte);

JOptionPane.showMessageDialog(null,result);

JOptionPane.showMessageDialog(null,e.decrypter(result));

}



}
Messages postés
545
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
28 septembre 2011
2
J'pense que voir le code pourrait être sympa^^

Sinon, bien que je connaisse pas l'algo, ça doit être du à des caractères spéciaux (ç,à,é,è ...) qui passe pas forcement bien au cryptage/décryptage.

Tente de passer un texte sans accents (comme cette phrase quoi)
Messages postés
35
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
16 septembre 2006

je viens de le poser juste deux minutes avant ton message
Messages postés
35
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
16 septembre 2006

g trouve la reponse

il fallait travailler sur des bytes au niveau des deux methodes

voila



class cryptage {



public byte[] crypter(String txt) throws Exception

{



KeyGenerator kg = KeyGenerator.getInstance("DES");

Key key = kg.generateKey();

///enregistrer la clé

FileOutputStream out = new FileOutputStream("fichier.dat");

ObjectOutputStream s = new ObjectOutputStream(out);

s.writeObject(key);

s.flush();

out.close();

//crypter

Cipher cipher = Cipher.getInstance("DES");

byte[] data = txt.getBytes();

cipher.init(Cipher.ENCRYPT_MODE, key);

byte[] result = cipher.doFinal(data);

return result;



}



public byte[] decrypter(byte[] txt) throws Exception

{



FileInputStream in = new FileInputStream("fichier.dat");

ObjectInputStream s = new ObjectInputStream(in);

Key key = (Key) s.readObject();

in.close();

Cipher cipher1 = Cipher.getInstance("DES");

cipher1.init(Cipher.DECRYPT_MODE, key);



byte[] original = cipher1.doFinal(txt);

return original;

}



}
Messages postés
7
Date d'inscription
dimanche 16 avril 2006
Statut
Membre
Dernière intervention
1 mai 2006

la dernière solution ne marche pas( le compilateur Java signale 2 erreurs).je sais pas
pourquoi! Merci
Messages postés
7
Date d'inscription
dimanche 16 avril 2006
Statut
Membre
Dernière intervention
1 mai 2006

la solution(qui ne marche pas) concernée c'est dans laquelle l'auteur de code(cryptage DES)a travaillé avec les bytes.
si vous avez un code de cryptage AES vous le publié.
Merci encore une fois
Messages postés
7
Date d'inscription
dimanche 16 avril 2006
Statut
Membre
Dernière intervention
1 mai 2006

voila un code pour le cryptage avec l'algorithme DES,et un autre code pour une interface graphique qui contient une zone de texte et 2 boutons pour crypter et decrypter le message.
le probleme que j'ai trouvé c'est de faire une liaison entre l'interface et le programme (de cryptage et decryptage).[cest à dire lorsque je met un message dans la zone de texte et je cilique sur le bouton:crypter,le message crypté va etre affiché dans la zone de texte à la place du message initial,si je clique sur le bouton:décrypter,le message en clair(initial)va etre affiché à la place du message crypté.]
/********code source pour la cryptographie DES**********/



import java.security.*;
import javax.crypto.*;
// encrypt and decrypt using the DES private key algorithm


public class PrivateExemple {


public static void main(String[] args) throws Exception {

// check args and get plaintext


// byte[] plainText = args[0].getBytes("UTF8");
String ss = "Azul kamal!";
byte[] plainText = ss.getBytes();

// get a DES private key
System.out.println("\nStart generating DES key");
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
keyGen.init(56);
Key key = keyGen.generateKey();
System.out.println("Finish generating DES key");

// get a DES cipher object and print the provider
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
System.out.println("\n" + cipher.getProvider().getInfo());

// encrypt using the key and the plaintext
System.out.println("\nStart encryption");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] cipherText = cipher.doFinal(plainText);
System.out.println("Finish encryption: ");
System.out.println(new String(cipherText, "UTF8"));



// decrypt the ciphertext using the same key
System.out.println("\nStart decryption");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] newPlainText = cipher.doFinal(cipherText);
System.out.println("Finish decryption: ");


System.out.println(new String(newPlainText, "UTF8"));
}
}
/****code de l'interface graphique de cryptage et decryptage****/

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.security.*;
import javax.crypto.*;


class bouton extends JFrame implements ActionListener {
public bouton(){

setBounds(50,50,700,400);
Container contenu=getContentPane();
contenu.setLayout(null);
setTitle("Cryptage / Decryptage des messages");

lb1=new JLabel(" Message");
lb1.setBounds(20,20,100,30);
contenu.add(lb1);

text1=new JTextArea(450,190);
text1.setBounds(100,20,500,200);
contenu.add(text1);

lb2=new JLabel("Mot de passe");
lb2.setBounds(20,240,100,20);
contenu.add(lb2);

text2=new JTextField();
text2.setBounds(100,240,200,20);
contenu.add(text2);

b1=new JButton("A propos de ...");
b1.setBounds(100,300,120,20);
contenu.add(b1);
b1.addActionListener(this);

b2=new JButton("Crypter");
b2.setBounds(250,300,100,20);
contenu.add(b2);
b2.setEnabled(false);
b2.addActionListener(this);

b3=new JButton("Decrypter");
b3.setBounds(400,300,100,20);
contenu.add(b3);
b3.setEnabled(false);
b3.addActionListener(this);

b4=new JButton("Quitter");
b4.setBounds(550,300,100,20);
contenu.add(b4);
b4.addActionListener(this);
}
public String txtacrypter(){
return text1.getText();
}
public void actionPerformed(ActionEvent ev) {

if(ev.getSource()==b1){ //action sur le bouton "Apropos de..."
if(!text2.getText().equals("")){
mondialog bd=new mondialog(this);
text=bd.lanceDialogue();
if(text.compareTo(text2.getText())==0){
b2.setEnabled(true);
b3.setEnabled(true);
}
else
JOptionPane.showMessageDialog(bd,"Mot de passe incorrecte",
"Message d'avertissement",
JOptionPane.ERROR_MESSAGE);
bd.dispose();
}
}

if(ev.getSource()==b2) //action sur le bouton "crypter"
System.out.println("action sur le boutton b2");

if(ev.getSource()==b3) //action sur le bouton "decrypter"
System.out.println("action sur le boutton b3");

if(ev.getSource()==b4) //action sur le bouton "quitter"
System.exit(0);
}

private JLabel lb1,lb2;
private JTextField text2;
private JTextArea text1;
private JButton b1,b2,b3,b4;
private String text;
}


///////////////////////// boite de dialogue /////////////////////////////////////////
class mondialog extends JDialog implements ActionListener{
public mondialog(JFrame proprio){
super(proprio,"Confirmer votre mot de passe",true);
setBounds(200,200,400,120);
Container contenu=getContentPane();
contenu.setLayout(null);

chtext=new JTextField(20);
chtext.setBounds(50,10,300,30);
contenu.add(chtext);
chtext.addActionListener(this);

okb=new JButton("ok");
okb.setBounds(90,50,80,30);
contenu.add(okb);
okb.addActionListener(this);

cb=new JButton("cancel");
cb.setBounds(210,50,80,30);
contenu.add(cb);
cb.addActionListener(this);

}
public void actionPerformed(ActionEvent ev){
if(ev.getSource()==okb){
ok=true;
setVisible(false);
}
if(ev.getSource()==cb)
setVisible(false);
}
public String lanceDialogue(){
ok=false;
setVisible(true);
if(ok) return chtext.getText();
else return null;
}
private boolean ok;
private JButton okb,cb;
private JTextField chtext;
}

public class premier{
public static void main(String[] argv){
bouton bt;
bt=new bouton();
bt.setVisible(true);
String ss=bt.txtacrypter();
}
}

indication:je crois qu'on dois utiliser les fonctions getText() et setText().si vous avez une solution ou bien une idée vous m'aidez!
soit dans ma boite de cette site,soit dans mon autre email:
[mailto:kamal.ou@hotmail.com kamal.ou@hotmail.com] et merci beaucoup