Cryptage aes128/192/256 en java avec bouncy castle

Contenu du snippet

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 / Exemple :


/*

  • 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; } } }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.