Cyril Rabat


Chiffrement symétrique en Java

 24/11/2015     23/10/2017      Programmation Java      Programmation client/serveur      Sécurité   

Utilisation du chiffrement AES en Java.

   Cet article explique comment utiliser AES pour chiffrer un message à l'aide d'une clé de 16 caractères.

Mots-clefs :   Java     chiffrement     AES   

La classe présentée ici permet de chiffrer un message à l'aide de l'algorithme AES. Un mot de passe de 16 caractères est demandé. Il est utilisé pour chiffrer puis pour déchiffrer afin d'illustrer le fonctionnement de l'algorithme.

Le programme

Le programme ci-dessous exploite la classe SecretKeySpec pour générer une clé à partir du mot de passe de 16 caractères. Il utilise ensuite la classe Cipher pour encoder le message spécifié en argument. Il exploite ensuite une autre instance pour déchiffrer le message codé.

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import java.security.InvalidKeyException;
 
/**
 * Classe permettant de tester le chiffrement et le dechiffrement avec AES.
 * @author Cyril Rabat
 * @version 23/10/2017
 */
public class ChiffrementAES {
 
    /**
     * Methode principale.
     * @param args[0] cle de chiffrement de 16 caractères
     * @param args[1] message que l'on veut chiffrer
     */
    public static void main(String[] args) {
        // Verification des arguments
        if(args.length != 2) {
            System.err.println("Utilisation :");
            System.err.println("  java ChiffrementAES motDePasse message");
            System.err.println("    où :");
            System.err.println("      - motDePasse : mot de passe de 16 caractères");
            System.err.println("      - message    : message que l'on veut chiffrer");
            System.exit(-1);
        }
        String motDePasse = args[0];
 
        // Chiffrement du message
        SecretKeySpec specification = new SecretKeySpec(motDePasse.getBytes(), "AES");
        byte[] bytes = null;
        try {
            Cipher chiffreur = Cipher.getInstance("AES");
            chiffreur.init(Cipher.ENCRYPT_MODE, specification);
            bytes = chiffreur.doFinal(args[1].getBytes());
        } catch(NoSuchAlgorithmException e) {
            System.err.println("Erreur lors du chiffrement : " + e);
            System.exit(-1);
        } catch(NoSuchPaddingException e) {
            System.err.println("Erreur lors du chiffrement : " + e);
            System.exit(-1);
        } catch(InvalidKeyException e) {
            System.err.println("Erreur lors du chiffrement : " + e);
            System.exit(-1);
        } catch(IllegalBlockSizeException e) {
            System.err.println("Erreur lors du chiffrement : " + e);
            System.exit(-1);
        } catch(BadPaddingException e) {
            System.err.println("Erreur lors du chiffrement : " + e);
            System.exit(-1);
        } 
 
        System.out.println("Message origine   : " + args[1]);
        System.out.println("Message chiffré   : " + new String(bytes));
 
        // Dechiffrement du message
        try {
            Cipher dechiffreur = Cipher.getInstance("AES");
            dechiffreur.init(Cipher.DECRYPT_MODE, specification);
            bytes = dechiffreur.doFinal(bytes);
        } catch(NoSuchAlgorithmException e) {
            System.err.println("Erreur lors du chiffrement : " + e);
            System.exit(-1);
        } catch(NoSuchPaddingException e) {
            System.err.println("Erreur lors du chiffrement : " + e);
            System.exit(-1);
        } catch(InvalidKeyException e) {
            System.err.println("Erreur lors du chiffrement : " + e);
            System.exit(-1);
        } catch(IllegalBlockSizeException e) {
            System.err.println("Erreur lors du chiffrement : " + e);
            System.exit(-1);
        } catch(BadPaddingException e) {
            System.err.println("Erreur lors du chiffrement : " + e);
            System.exit(-1);
        } 
 
        System.out.println("Message déchiffré : " + new String(bytes));
    }
 
}

 Télécharger le fichier

Utilisation

Pour utiliser le programme, tapez simplement la commande suivante (une fois le programme compilé) :

java ChiffrementAES 0123456789012345 "Bonjour tout le monde"

Le texte Bonjour tout le monde sera chiffré puis déchiffré à l'aide de la clé 0123456789012345.

Articles connexes


Version de cette page Mercredi 16 Décembre 2015

© Cyril Rabat 2018

Connexion

Mot de passe perdu

Dernières nouvelles

20/07/2020 Vous pouvez consulter la page "prérentrée" pour avoir les informations sur les journées de prérentrées en Licence INFO.
16/07/2020 La première phase des inscriptions se termine le 21 juillet. La période pour la deuxième phase est du 19 au 31 août.
25/06/2020 La période pour la phase complémentaire pour la procédure VES est fixée du 10 juillet 2020 au 24 août 2021.
29/05/2020 Le jury de fin d'année aura lieu le jeudi 11 juin, les examens de deuxième session du 22 juin au 3 juillet et le jury de deuxième session le jeudi 16 juillet.

Contact

Courriel :
cyril.rabat [at] univ-reims.fr

Téléphone :
+33-326-91-33-81

Facebook :
lien Facebook direct