begin process at 2012 02 10 19:10:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > CRYPTAGE AES128/192/256 EN JAVA AVEC BOUNCY CASTLE

CRYPTAGE AES128/192/256 EN JAVA AVEC BOUNCY CASTLE


 Information sur la source

 Description

salut a tous
voila un petit code comme l'a demandé  Moucave , il crypte une String avec AES (cle 128 ou 192 ou 256) avec bouncycastle.pour les cles 192 et 256 il faut aussi ajouter l'extension de JCE security (disponible sur java.sun)
ce programme fonctionne parfaitement ( les resultat sont visible dans les fichiers de sauvegarde)
on doit transformer la chaine en byte[] pour pouvoir chiffrer et dechiffrer et recuperer a la sortie des byte[] aussi mais je n'ai pas encore trouver le moyen de transformer les resultat (byte[]) en String.
(la fonction toString() ne donne pas le resultat souhaité)
  

Source

  • /*
  • * ChiffSym.java
  • *
  • * Created on 9 juin 2006, 05:51
  • *
  • * To change this template, choose Tools | Template Manager
  • * and open the template in the editor.
  • */
  • /**
  • /**
  • *
  • * @author xheo
  • */
  • import java.io.*;
  • import javax.crypto.SecretKey;
  • import javax.crypto.Cipher;
  • import javax.crypto.spec.IvParameterSpec;
  • import javax.crypto.spec.SecretKeySpec;
  • import java.security.*;
  • import java.util.*;
  • import javax.crypto.*;
  • import org.bouncycastle.jce.provider.BouncyCastleProvider;
  • import java.security.SecureRandom;
  • import javax.crypto.KeyGenerator;
  • public class ChiffSym {
  • /** Creates a new instance of ChiffSym */
  • public ChiffSym()
  • {
  • }
  • public static void main(String[] args) {
  • SecretKey cle=null;
  • int taille= 128; // ou 192 ou 256
  • String chaine= "chaine a chiffrer";
  • cle=genererCleAES(taille);
  • chiffrement_sym(chaine,cle);
  • }
  • public static void chiffrement_sym(String entree ,SecretKey cle_aes)
  • {
  • try {
  • byte[] buffer = entree.getBytes();
  • System.out.println("chiffrement de :"+buffer );
  • // CHoix de l'iv
  • byte[] iv = {
  • (byte) 0xc9, (byte) 0x36,(byte) 0xea,(byte) 0x78,
  • (byte) 0xd9, (byte) 0x36,(byte) 0x99,(byte) 0x3e,
  • (byte) 0x36, (byte) 0x78,(byte) 0x52,(byte) 0x78,
  • (byte) 0x3e, (byte) 0xea,(byte) 0x3e,(byte) 0xf2, };
  • IvParameterSpec salt = new IvParameterSpec(iv);
  • // ajout du provider BC
  • Security.addProvider(new BouncyCastleProvider());
  • SecureRandom sec_rand = SecureRandom.getInstance("SHA1PRNG","SUN");
  • // Chiffrement de la chaine
  • Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
  • c.init(Cipher.ENCRYPT_MODE, cle_aes, salt);
  • byte[] buf_crypt = c.doFinal(buffer);
  • System.out.println("resultat"+buf_crypt.toString());
  • // sauvegarde ds un fichier
  • FileOutputStream envfos = new FileOutputStream("chaine_chiffree");
  • envfos.write(buf_crypt);
  • envfos.close();
  • // Déchiffrement de le chaine
  • System.out.println("dechiffrement");
  • c = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
  • c.init(Cipher.DECRYPT_MODE, cle_aes, salt);
  • byte[] buf_decrypt = c.doFinal(buf_crypt);
  • char[] sortie= new char[(int)buf_decrypt.length];
  • DataInputStream instream=null;
  • System.out.println(buf_decrypt.toString());
  • // sauvegarde ds un fichier
  • envfos = new FileOutputStream("fichier_dechiffre");
  • envfos.write(buf_decrypt);
  • envfos.close();
  • } catch (Exception e) {
  • e.printStackTrace();
  • }
  • }
  • public static SecretKey genererCleAES(int key_len)
  • {
  • try
  • {
  • // CHoix du vecteur initial (mode CBC)
  • byte[] iv = {
  • (byte) 0xc9, (byte) 0x36,(byte) 0xea,(byte) 0x78,
  • (byte) 0xd9, (byte) 0x36,(byte) 0x99,(byte) 0x3e,
  • (byte) 0x36, (byte) 0x78,(byte) 0x52,(byte) 0x78,
  • (byte) 0x3e, (byte) 0xea,(byte) 0x3e,(byte) 0xf2, };
  • IvParameterSpec salt = new IvParameterSpec(iv);
  • // ajout du provider BC
  • Security.addProvider(new BouncyCastleProvider());
  • //generation de la clé
  • SecureRandom sec_rand = SecureRandom.getInstance("SHA1PRNG","SUN");
  • System.out.println("Generation de cle AES de "+key_len+" bits");
  • KeyGenerator key_gen = KeyGenerator.getInstance("AES","BC"); // instance du generateur AES.
  • key_gen.init(key_len,sec_rand); // Configurer avec les bits de "key_size" en utilisant "sec-rand" salted PRNG.
  • SecretKey cle_aes = key_gen.generateKey(); //Generer la cle
  • return(cle_aes);
  • }
  • catch (Exception e)
  • {
  • e.printStackTrace();
  • return null;
  • }
  • }
  • }
/*
 * ChiffSym.java
 *
 * Created on 9 juin 2006, 05:51
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
/**
/**
 *
 * @author xheo
 */

import java.io.*;
import javax.crypto.SecretKey;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;
import java.util.*;
import javax.crypto.*;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.security.SecureRandom;
import javax.crypto.KeyGenerator;
public class ChiffSym {
    
    /** Creates a new instance of ChiffSym */
    public ChiffSym()
    {
    }
    public static void main(String[] args) {
        SecretKey cle=null;
        int taille= 128; // ou 192 ou 256
        String chaine= "chaine a chiffrer";
        cle=genererCleAES(taille);
        chiffrement_sym(chaine,cle);
    }
    public static void chiffrement_sym(String entree ,SecretKey cle_aes) 
    {
       try {
	
	
	byte[] buffer = entree.getBytes();
	 System.out.println("chiffrement de :"+buffer );
	// CHoix de l'iv
	byte[] iv = { 
            (byte) 0xc9, (byte) 0x36,(byte) 0xea,(byte) 0x78,
            (byte) 0xd9, (byte) 0x36,(byte) 0x99,(byte) 0x3e,
            (byte) 0x36, (byte) 0x78,(byte) 0x52,(byte) 0x78,
            (byte) 0x3e, (byte) 0xea,(byte) 0x3e,(byte) 0xf2, };
	IvParameterSpec salt = new IvParameterSpec(iv);
        // ajout  du provider BC
        Security.addProvider(new BouncyCastleProvider());
        SecureRandom sec_rand = SecureRandom.getInstance("SHA1PRNG","SUN");

	// Chiffrement de la chaine 
	Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");    
        c.init(Cipher.ENCRYPT_MODE, cle_aes, salt);
        byte[] buf_crypt = c.doFinal(buffer);
        System.out.println("resultat"+buf_crypt.toString());
     // sauvegarde ds un fichier
	 FileOutputStream envfos = new FileOutputStream("chaine_chiffree");
	envfos.write(buf_crypt);
	envfos.close();

	// Déchiffrement de le chaine
        System.out.println("dechiffrement");
	c = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");    
        c.init(Cipher.DECRYPT_MODE, cle_aes, salt);
	byte[] buf_decrypt = c.doFinal(buf_crypt);
        char[] sortie= new char[(int)buf_decrypt.length];
        DataInputStream instream=null;
          System.out.println(buf_decrypt.toString());  
	// sauvegarde ds un fichier
	envfos = new FileOutputStream("fichier_dechiffre");
	envfos.write(buf_decrypt);
	envfos.close();

} catch (Exception e) {
	e.printStackTrace();
}
    }
    public static SecretKey genererCleAES(int key_len)
    {
       try
       {
// CHoix du   vecteur initial (mode CBC)
           byte[] iv = { 
            (byte) 0xc9, (byte) 0x36,(byte) 0xea,(byte) 0x78,
            (byte) 0xd9, (byte) 0x36,(byte) 0x99,(byte) 0x3e,
            (byte) 0x36, (byte) 0x78,(byte) 0x52,(byte) 0x78,
            (byte) 0x3e, (byte) 0xea,(byte) 0x3e,(byte) 0xf2, };
	IvParameterSpec salt = new IvParameterSpec(iv);
        // ajout  du provider BC
        Security.addProvider(new BouncyCastleProvider());
	//generation de la clé
        SecureRandom sec_rand = SecureRandom.getInstance("SHA1PRNG","SUN");
        System.out.println("Generation de cle AES de "+key_len+" bits");
        KeyGenerator key_gen = KeyGenerator.getInstance("AES","BC"); //  instance du generateur AES.
        key_gen.init(key_len,sec_rand); // Configurer avec les bits de "key_size" en utilisant "sec-rand" salted PRNG.
        SecretKey cle_aes = key_gen.generateKey(); //Generer la cle
        return(cle_aes);
       }
       catch (Exception e)
       {
           e.printStackTrace();
           return null;
       }
    }
}



 Sources de la même categorie

Source avec Zip DÉCOMPILER UN .CLASS JAVA AVEC JAD par Julien39
REDIMENSIONNER UNE JTABLE par Julien39
Source avec Zip UTILISATION DE LA SÉRIALISATION par Julien39
Source avec Zip Source avec une capture ORGANISER UNE APPLICATION JAVA par Julien39
Source avec Zip [TUTORIEL] COMMENT RÉAGIR FACE À UNE EXCEPTION par Julien39

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CRYPTEUR-DÉCRYPTEUR AES par dragooon74
Source avec Zip Source avec une capture DATA ENCRYPTION STANDARD (DES+UI) par lemout
Source avec une capture FONCTION DE CRYPTAGE EN JAVA par supergrandebutant
Source avec Zip GESTSIONNAIRE DE MOTS DE PASSE PORTABLE par JFrancoisB
CRYPTAGE PAR DES par Scupper

Commentaires et avis

Commentaire de visionsoft le 09/12/2006 19:35:28

avec import org.bouncycastle.jce.provider.BouncyCastleProvider;
, je reçois un message ordinaire de class notFoundException, il me faut la classe rovider. je ne sais pas où avoir le provider sur le net. pouvez vous m'indiquer l'adresse. Merci

Commentaire de wax78 le 19/03/2007 16:52:55

Pour ton histoire de chaines tu px utiliser (que j'ai trouvé je ne sais plus ou) :

public static String asHex (byte buf[]) {
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;

for (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();
}

et

public static String decodeHexString(String hexText) {

     String decodedText=null;
     String chunk=null;

     if(hexText!=null && hexText.length()>0) {
     int numBytes = hexText.length()/2;

     byte[] rawToByte = new byte[numBytes];
     int offset=0;
     int bCounter=0;
     for(int i =0; i <numBytes; i++) {
     chunk = hexText.substring(offset,offset+2);
     offset+=2;
     rawToByte[i] = (byte) (Integer.parseInt(chunk,16) & 0x000000FF);
     }
     decodedText= new String(rawToByte);
     }
     return decodedText;
     }


normalement avec rien que la premiere tu dois pouvoir t'en sortir en la modifiant.

Commentaire de tiger_j le 11/05/2007 14:34:07

bonjour, j'ai téléchargé le paquage de bouncy castle API mais je n'arrive pas à l'intégrer avec ma plateforme j2me avec netbeans 5.0, aurriez vous une solution pour cela.Merci, c'est urgent

Commentaire de simolo le 26/05/2008 17:05:39

Bonjour,

merci d'abord d'avoir mis en ligne cette contribution. ton programme m'intéresse énormément. je dois créer un algorithme de cryptage, qui crypte un fichier, mais par bloc. bloc de caractère par bloc de caractère.
par contre je ne vois pas où se trouve le dossier de sauvegarde que tu mentionnes dans ta note.
merci de ton aide précieuse

Commentaire de xheo le 27/05/2008 17:43:38

Salut Simolo ,
1- tu remarqueras dans le code source le cipher (moteur de chiffrement en quelque sorte)est :"AES/CBC/PKCS5Padding" = algorithme AES ,mode CBC (par bloc)avec padding (au cas ou la taille de ton texte à chiffrer n'est pas divisible par la taille des bolc donc le dernier bloc sera completé automatiquement).Donc je crois que cela devrais satisfaire ton besoin.
Tu pourra toute la documentation des differents modes dans bounsycastle et à toi de juger le meilleur.
2- pour les fichiers de sauvegarde, je parlais des fichiers textes que crée ce code : fichier_dechiffre et fichier_chiffre. je me suis peut etre mal exprimé:)
mais ces fichiers peuvent etre utilisé comment moyen de verification (essayer de dechiffrer le fichier_ciffré par exemple avec un code en C ou autre)

Commentaire de simolo le 28/05/2008 16:43:39

merci xheo pour ta réponse.

aprés avoir lu le code, j'ai vu qu'en fait l'algorithme chiffre et déchiffre en même temps une chaine de caractère. je dois mettre en place un sytsème de client-serveur d'envoi de fichier en crypté!!! est-ce que par exemple coté serveur, on met l'algorithme uniquement de cryptage et coté client on ne met que l'algorithme de décryptage??

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Probleme de securite avec les applets... [ par xlunar ] Bonjour,Je développe une applet client chat.Si l'IP du serveur chat est différente de l'IP du serveur web, j'ai une erreur du type access denied....Ca [cryptage] Fusionner un code RSA et un reso TCP [ par ckiki93 ] [cryptage] Fusionner un code RSA et un reso TCP [ par ckiki93 ] Dsl pour le post Vide precedent....1-Les codes sources sont Correct. mon probleme ? 2-je voudrais réaliser le cryptage sur un reseau TCP Serveur Clien Cryptage simple d'une chaine de caracteres [ par fllacer ] Bonjour,je cherche comment crypter simplement une String en Java et la d&#233;crypter.ex : String aCrypter = "password";String crypt = cryptage ("pass Cryptage DES en UNICODE [ par neena ] Je vous explique mon gros probleme : jai un prog qui crypte un mot de passe en DES (&#231;a marche) mais le pb cest que les charact&#233;res qu'il me Enlever avertissement de securite [ par ViviaN_sAMurAI ] Bonjour, Je souhaiterai savoir comment enlever l'avertissement de s&#233;curit&#233; que demande l'applet java (coolsmile)... ViviaN Urgent problème pour un logiciel de cryptage à algorythme novelle génération invilable [ par lulu42 ] Bonjour.J'aimerais savaoir coment je peux convertir un integer (dont la valeur ne d&#233;passe pas 255,&nbsp;je voudrais donc ignorer l'octet de poids cryptage [ par progrima ] Bonjour à tous!! Je veux réaliser une application qui fait le cryptage des fichiers, sur internet j'ai trouvé plusieurs type de cryptage, mais c'est q cryptage et decryptage [ par thrmgs ] Bonjour&nbsp;&nbsp;&nbsp;a tousje suis debutant en java script.je cherche a creer 2 fenetre ,l une qui permet de crypter le message grace a RSA et l a L'API Jce de Cryptage de Java [ par mrabti_idriss ] Bonjour je suis un debutant dans la cryptographie en utilisant l'api Java JCE, est ce que quelqu'un pourrait me donner un lien o&#249; trouver un peu


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,139 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales