Exercice Java Corrigé – POO – Interfaces
Avec des exercices corrigés en Java, vous pratiquerez divers concepts du langage de programmation Java. Vous commencerez par des exercices Java de base à des exercices plus avancés. La solution est fournie pour chaque exercice. Vous devez essayer de résoudre chaque problème par vous-même avant de vérifier la solution. Si vous avez des questions concernant chaque problème, nous vous encourageons à les poster sur notre forum.
Exercice 1:
Écrire un programme Java pour créer une interface Forme avec la méthode getSurface(). Créez trois classes Rectangle, Cercle et Triangle qui implémentent l’interface Forme. Implémentez la méthode getSurface() pour chacune des trois classes.
// Ceci est une interface nommée 'Forme' qui définit un contrat pour les classes à implémenter. interface Forme { // Signature de la méthode abstraite pour récupérer la surface // d'une forme. double getSurface(); } // Ceci est la classe 'Rectangle' qui implémente l'interface 'Forme'. class Rectangle implements Forme { // Variables d'instance privées pour stocker les dimensions du // rectangle. private double longueur; private double largeur; // Constructeur pour créer un objet Rectangle avec la longueur et // la largeur données. public Rectangle(double longueur, double largeur) { this.longueur = longueur; this.largeur = largeur; } // Implémentation de la méthode 'getSurface' comme requis par // l'interface 'Forme'. @Override public double getSurface() { // Calculer et retourner la surface du rectangle. return longueur * largeur; } } // Ceci est la classe 'Cercle' qui implémente l'interface 'Forme'. class Cercle implements Forme { // Variable d'instance privée pour stocker le rayon du cercle. private double rayon; // Constructeur pour créer un objet Cercle avec un rayon donné. public Cercle(double rayon) { this.rayon = rayon; } // Implémentation de la méthode 'getSurface' comme requis par // l'interface 'Forme'. @Override public double getSurface() { // Calculer et retourner la surface du cercle en utilisant la // formule : π * r^2. return Math.PI * rayon * rayon; } } // Ceci est la classe 'Triangle' qui implémente l'interface 'Forme'. class Triangle implements Forme { // Variables d'instance privées pour stocker la base et la // hauteur du triangle. private double base; private double hauteur; // Constructeur pour créer un objet Triangle avec une base et une // hauteur données. public Triangle(double base, double hauteur) { this.base = base; this.hauteur = hauteur; } // Implémentation de la méthode 'getSurface' comme requis par // l'interface 'Forme'. @Override public double getSurface() { // Calculer et retourner la surface du triangle en utilisant // la formule : 0,5 * base * hauteur. return 0.5 * base * hauteur; } } // Classe principale qui crée des objets de Rectangle, Cercle et Triangle. public class Main { public static void main(String[] args) { // Créer un objet Rectangle avec longueur=10 et largeur=12 Rectangle r = new Rectangle(10, 12); // Créer un objet Cercle avec un rayon=3 Cercle c = new Cercle(3); // Créer un objet Triangle avec une base=4 et une hauteur=6 Triangle t = new Triangle(4, 6); // Afficher la surface du Rectangle System.out.println("Surface du Rectangle: "+ r.getSurface()); // Afficher la surface du Cercle System.out.println("Surface du Cercle: "+ c.getSurface()); // Afficher la surface du Triangle System.out.println("Surface du Triangle: "+ t.getSurface()); } }
Sortie:
Surface du Rectangle: 120.0 Surface du Cercle: 28.274333882308138 Surface du Triangle: 12.0
Explication:
En Java, une interface est un type qui définit un contrat que des classes doivent respecter. Elle contient des méthodes abstraites (sans implémentation) que les classes qui l’implémentent doivent obligatoirement définir. Une interface peut aussi contenir des variables (qui sont implicitement public, static, et final), ainsi que des méthodes par défaut et des méthodes statiques avec une implémentation.
Exercice 2:
Écrire un programme Java pour créer une interface Animal avec une méthode appelée aboyer() qui ne prend pas d’arguments et retourne void. Créez une classe Chien qui implémente l’interface Animal et surcharge la méthode aboyer() pour afficher « Le chien aboie ».
// Déclarer l'interface Animal interface Animal { // Déclarer la méthode abstraite "aboyer" que les classes // implémentant cette interface doivent définir void aboyer(); } // Déclarer la classe Chien, qui implémente l'interface Animal class Chien implements Animal { // Implémenter la méthode "aboyer" requise par l'interface Animal @Override public void aboyer() { // Afficher un message indiquant que le chien aboie System.out.println("Le chien aboie !"); } } // Déclarer la classe Main public class Main { public static void main(String[] args) { // Créer une instance de la classe Chien Chien chien = new Chien(); // Appeler la méthode "aboyer" sur l'instance de Chien chien.aboyer(); } }
Sortie:
Le chien aboie !
Exercice 3:
Écrivez un programme Java pour créer une interface Volable avec une méthode appelée obj_vol(). Créez trois classes Satellite, Avion et Helicopter qui implémentent l’interface Volable. Implémentez la méthode obj_vol() pour chacune des trois classes.
// Déclarer l'interface Volable interface Volable { // Déclarer la méthode abstraite "obj_vol" que les classes // implémentant cette interface doivent définir void obj_vol(); } // Déclarer la classe Satellite, qui implémente l'interface Volable class Satellite implements Volable { // Implémenter la méthode "obj_vol" requise par l'interface // Volable @Override public void obj_vol() { // Afficher un message indiquant que le satellite vole System.out.println("Le satellite vole"); } } // Déclarer la classe Avion, qui implémente l'interface Volable class Avion implements Volable { // Implémenter la méthode "obj_vol" requise par l'interface // Volable @Override public void obj_vol() { // Afficher un message indiquant que l'avion vole System.out.println("L'avion vole"); } } // Déclarer la classe Helicopter, qui implémente l'interface Volable class Helicopter implements Volable { // Implémenter la méthode "obj_vol" requise par l'interface // Volable @Override public void obj_vol() { // Afficher un message indiquant que l'hélicoptère vole System.out.println("L'hélicoptère vole"); } } // Déclarer la classe Main public class Main { public static void main(String[] args) { // Créer un tableau d'objets Volable, incluant un satellite, // un avion et un hélicoptère Volable[] objetsVolants = {new Satellite(), new Avion(), new Helicopter()}; // Itérer à travers le tableau et appeler la méthode // "obj_vol" sur chaque objet for (Volable obj : objetsVolants) { obj.obj_vol(); } } }
Sortie:
Le satellite vole L'avion vole L'hélicoptère vole
Exercice 4:
Écrivez un programme Java pour créer un système bancaire avec trois classes – Banque, Compte, CompteEpargne et CompteCourant. La banque doit disposer d’une liste de comptes et de méthodes pour les ajouter. Les comptes doivent être une interface avec des méthodes de dépôt, de retrait, de calcul des intérêts et de visualisation des soldes. ‘CompteEpargne’ et ‘CompteCourant’ doivent implémenter l’interface ‘Compte’ et disposer de leurs propres méthodes.
// Importer les bibliothèques requises pour List et ArrayList import java.util.ArrayList; import java.util.List; // Déclarer l'interface Compte interface Compte { // Déclarer la méthode abstraite "deposer" pour déposer un // montant spécifié void deposer(double amount); // Déclarer la méthode abstraite "retirer" pour retirer un // montant spécifié void retirer(double amount); // Déclarer la méthode abstraite "getSolde" pour récupérer le // solde actuel double getSolde(); } // Déclarer la classe CompteEpargne, qui implémente l'interface Compte class CompteEpargne implements Compte { // Déclarer des variables d'instance privées pour stocker le // solde et le taux d'intérêt private double solde; private double tauxInteret; // Constructeur pour initialiser le solde et le taux d'intérêt public CompteEpargne(double depotInitial, double tauxInteret) { this.solde = depotInitial; this.tauxInteret = tauxInteret; } // Implémenter la méthode "deposer" pour ajouter un montant // spécifié au solde @Override public void deposer(double montant) { solde += montant; } // Implémenter la méthode "retirer" pour soustraire un montant // spécifié du solde @Override public void retirer(double montant) { solde -= montant; } // Implémenter la méthode "getSolde" pour récupérer le solde // actuel @Override public double getSolde() { return solde; } // Méthode pour appliquer les intérêts au solde public void appliquerTauxInteret() { // Appliquer le taux d'intérêt (en pourcentage) au solde pour // 1 an solde += solde * tauxInteret / 100; } } // Déclarer la classe CompteCourant, qui implémente l'interface Compte class CompteCourant implements Compte { // Déclarer des variables d'instance privées pour stocker le // solde et la limite de découvert private double solde; private double limiteDecouvert; // Constructeur pour initialiser le solde et la limite de // découvert public CompteCourant(double depotInitial, double limiteDecouvert) { this.solde = depotInitial; this.limiteDecouvert = limiteDecouvert; } // Implémenter la méthode "deposer" pour ajouter un montant // spécifié au solde @Override public void deposer(double montant) { solde += montant; } // Implémenter la méthode "retirer" pour soustraire un montant // spécifié du solde @Override public void retirer(double montant) { // Vérifier si le solde plus la limite de découvert est // suffisant pour couvrir le retrait if (solde + limiteDecouvert >= montant) { solde -= montant; } } // Implémenter la méthode "getSolde" pour récupérer le solde // actuel @Override public double getSolde() { return solde; } // Méthode pour définir la limite de découvert du compte courant public void setLimiteDecouvert(double limiteDecouvert) { this.limiteDecouvert = limiteDecouvert; } } // Déclarer la classe Banque class Banque { // Déclarer une liste privée pour stocker les comptes private List<Compte> comptes; // Constructeur pour initialiser la liste des comptes public Banque() { comptes = new ArrayList<>(); } // Méthode pour ajouter un compte à la liste des comptes public void addCompte(Compte compte) { comptes.add(compte); } // Méthode pour supprimer un compte de la liste des comptes public void removeAccount(Compte compte) { comptes.remove(compte); } // Méthode pour déposer un montant spécifié dans un compte public void deposer(Compte compte, double montant) { compte.deposer(montant); } // Méthode pour retirer un montant spécifié d'un compte public void retirer(Compte compte, double montant) { compte.retirer(montant); } // Méthode pour afficher les soldes de tous les comptes dans la // banque public void afficherSoldesComptes() { for (Compte compte : comptes) { System.out.println("Solde du compte: "+ compte.getSolde()); } } } // Déclarer la classe Main public class Main { public static void main(String[] args) { // Créer une instance de la classe Banque Banque banque = new Banque(); // Créer un Compte Épargne avec un dépôt initial et un taux // d'intérêt CompteEpargne ce = new CompteEpargne(1000.0, 1.25); System.out.println("Compte Épargne :\nDépôt initial : 1000.00 €\nTaux d'intérêt : 1,25%"); // Créer un Compte Courant avec un dépôt initial et une // limite de découvert CompteCourant cc = new CompteCourant(5000.0, 1000.0); System.out.println("\nCompte Courant:\nDépôt initial: 5000.00 €\nLimite de découvert: 1000.00 €"); // Ajouter le CompteEpargne et le CompteCourant à la banque banque.addCompte(ce); banque.addCompte(cc); System.out.println("\nDépôt de 100 € sur le Compte Épargne."); // Déposer 100 € sur le CompteEpargne banque.deposer(ce, 100.0); System.out.println("Dépôt de 500 € sur le Compte Courant."); // Déposer 500 € sur le CompteCourant banque.deposer(cc, 500.0); System.out.println("Retrait de 150 € du Compte Épargne.\n"); // Retirer 150 € du CompteEpargne banque.retirer(ce, 150.0); System.out.println("\nCompte Épargne et Compte Courant:"); // Afficher les soldes de tous les comptes dans la banque banque.afficherSoldesComptes(); // Appliquer les intérêts au CompteEpargne ce.appliquerTauxInteret(); System.out.println("\nAprès l'application des intérêts sur le Compte Épargne pour 1 an:"); System.out.println("Compte Épargne et Compte Courant:"); // Afficher les soldes de tous les comptes dans la banque // après application des intérêts banque.afficherSoldesComptes(); } }
Sortie:
Compte Épargne : Dépôt initial : 1000.00 € Taux d’intérêt : 1,25% Compte Courant: Dépôt initial: 5000.00 € Limite de découvert: 1000.00 € Dépôt de 100 € sur le Compte Épargne. Dépôt de 500 € sur le Compte Courant. Retrait de 150 € du Compte Épargne. Compte Épargne et Compte Courant: Solde du compte: 950.0 Solde du compte: 5500.0 Après l'application des intérêts sur le Compte Épargne pour 1 an: Compte Épargne et Compte Courant: Solde du compte: 961.875 Solde du compte: 5500.0
Exercice 5:
Écrivez un programme Java pour créer une interface ‘Redimensionnable’ avec des méthodes resizeWidth(int width) et resizeHeight(int height) qui permettent de redimensionner un objet. Créez une classe Rectangle qui implémente l’interface ‘Redimensionnable’ et les méthodes de redimensionnement.
// Déclarer l'interface Redimensionnable interface Redimensionnable { // Déclarer la méthode abstraite "resizeWidth" pour // redimensionner la largeur void resizeWidth(int width); // Déclarer la méthode abstraite "resizeHeight" pour // redimensionner la hauteur void resizeHeight(int height); } // Déclarer la classe Rectangle, qui implémente l'interface Redimensionnable class Rectangle implements Redimensionnable { // Déclarer des variables d'instance privées pour stocker la // largeur et la hauteur private int width; private int height; // Constructeur pour initialiser la largeur et la hauteur public Rectangle(int width, int height) { this.width = width; this.height = height; } // Implémenter la méthode "resizeWidth" pour redimensionner la // largeur public void resizeWidth(int width) { this.width = width; } // Implémenter la méthode "resizeHeight" pour redimensionner la // hauteur public void resizeHeight(int height) { this.height = height; } // Méthode pour afficher la largeur et la hauteur actuelles du // rectangle public void afficherSize() { System.out.println("Largeur: "+ width +", Hauteur: "+ height); } } // Déclarer la classe Main public class Main { public static void main(String[] args) { // Créer une instance de la classe Rectangle avec une taille // initiale Rectangle rectangle = new Rectangle(100, 150); // Afficher la taille initiale du rectangle rectangle.afficherSize(); // Redimensionner le rectangle en changeant sa largeur et sa // hauteur rectangle.resizeWidth(160); rectangle.resizeHeight(180); // Afficher la nouvelle taille du rectangle rectangle.afficherSize(); } }
Sortie:
Largeur: 100, Hauteur: 150 Largeur: 160, Hauteur: 180
Exercice 6:
Écrivez un programme Java pour créer une interface Dessinable avec une méthode dessin() qui ne prend pas d’arguments et renvoie un résultat nul. Créez trois classes Cercle, Rectangle et Triangle qui implémentent l’interface Dessinable et surchargent la méthode dessin() pour dessiner leurs formes respectives.
// Importer les bibliothèques nécessaires pour les graphiques et l'interface utilisateur import java.awt.*; import javax.swing.*; // Déclarer l'interface Dessinable interface Dessinable { // Déclarer la méthode abstraite "dessin" que les classes // implémentant cette interface doivent fournir void dessin(); } // Déclarer la classe Cercle, qui implémente l'interface Dessinable class Cercle implements Dessinable { // Implémenter la méthode "dessin" requise par l'interface // Dessinable public void dessin() { // Créer un nouveau JFrame pour afficher le cercle JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 400); frame.setVisible(true); // Créer un JPanel pour le dessin personnalisé JPanel panel = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // Définir la couleur de dessin en rouge et dessiner // un cercle g.setColor(Color.RED); g.fillOval(100, 100, 200, 200); } }; // Ajouter le panel au cadre (frame) frame.add(panel); } } // Déclarer la classe Rectangle, qui implémente l'interface Dessinable class Rectangle implements Dessinable { // Implémenter la méthode "dessin" requise par l'interface // Dessinable public void dessin() { // Créer un nouveau JFrame pour afficher le rectangle JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 400); frame.setVisible(true); // Créer un JPanel pour le dessin personnalisé JPanel panel = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // Définir la couleur de dessin en bleu et dessiner // un rectangle g.setColor(Color.BLUE); g.fillRect(100, 100, 200, 200); } }; // Ajouter le panel au cadre (frame) frame.add(panel); } } // Déclarer la classe Triangle, qui implémente l'interface Dessinable class Triangle implements Dessinable { // Implémenter la méthode "dessin" requise par l'interface // Dessinable public void dessin() { // Créer un nouveau JFrame pour afficher le triangle JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 400); frame.setVisible(true); // Créer un JPanel pour le dessin personnalisé JPanel panel = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // Définir la couleur de dessin en vert et dessiner // un polygone (triangle) g.setColor(Color.GREEN); int[] xPoints = { 200, 100, 300 }; int[] yPoints = { 100, 300, 300 }; g.fillPolygon(xPoints, yPoints, 3); } }; // Ajouter le panel au cadre (frame) frame.add(panel); } } // Déclarer la classe Main public class Main { public static void main(String[] args) { // Créer des instances d'objets Dessinable, qui sont Cercle, // Rectangle, et Triangle Dessinable cercle = new Cercle(); Dessinable rectangle = new Rectangle(); Dessinable triangle = new Triangle(); // Appeler la méthode "dessin" pour afficher chaque forme cercle.dessin(); rectangle.dessin(); triangle.dessin(); } }
Sortie:
Exercice 7:
Écrire un programme Java pour créer une interface ‘Searchable’ avec une méthode search(String keyword) qui recherche un mot-clé donné dans un document texte. Créez deux classes Document et WebPage qui implémentent l’interface ‘Searchable’ et fournissent leurs propres implémentations de la méthode search().
// Déclarer l'interface Searchable interface Searchable { // Déclarer la méthode abstraite "search" que les classes // implémentant cette interface doivent fournir boolean search(String keyword); } // Déclarer la classe Document, qui implémente l'interface Searchable class Document implements Searchable { // Déclarer une variable d'instance privée pour stocker le // contenu du document private String content; // Constructeur pour initialiser le contenu du document public Document(String content) { this.content = content; } // Implémenter la méthode "search" requise par l'interface // Searchable public boolean search(String keyword) { // Vérifier si le contenu contient le mot-clé spécifié return content.contains(keyword); } } // Déclarer la classe, qui implémente l'interface Searchable class PageWeb implements Searchable { // Déclarer des variables d'instance privées pour stocker l'URL // et le contenu HTML private String url; private String htmlContent; // Constructeur pour initialiser l'URL et le contenu HTML public PageWeb(String url, String htmlContent) { this.url = url; this.htmlContent = htmlContent; } // Implémenter la méthode "search" requise par l'interface // Searchable public boolean search(String keyword) { // Vérifier si le contenu HTML contient le mot-clé spécifié return htmlContent.contains(keyword); } } // Déclarer la classe Main public class Main { public static void main(String[] args) { // Créer une instance de la classe Document avec un contenu // de test Document document = new Document("Ceci est un document de test."); // Rechercher un mot-clé dans le document et stocker le // résultat boolean res1 = document.search("test"); // Afficher si le document contient le mot-clé System.out.println("Le document contient le mot-clé 'test': "+ res1); // Créer une instance de la classe PageWeb avec une URL et un // contenu HTML de test PageWeb webPage = new PageWeb("https://waytolearnx.com", "Ceci est une page web de test."); // Rechercher un mot-clé dans la page web et stocker le // résultat boolean res2 = webPage.search("java"); // Afficher si la page web contient le mot-clé System.out.println("La page web contient le mot-clé 'java': "+ res2); } }
Sortie:
Le document contient le mot-clé 'test': true La page web contient le mot-clé 'java': false
Exercice 8:
Écrire un programme Java pour créer une interface Sortable avec une méthode sort() qui trie un tableau d’entiers par ordre croissant. Créez deux classes BubbleSort et SelectionSort qui implémentent l’interface Sortable et fournissent leurs propres implémentations de la méthode sort().
// Déclarer l'interface Sortable (Triable) interface Sortable { // Déclarer la méthode abstraite "sort" que les classes // implémentant cette interface doivent fournir void sort(int[] tab); } // Déclarer la classe BubbleSort, qui implémente l'interface Sortable class BubbleSort implements Sortable { // Implémenter la méthode "sort" requise par l'interface Sortable public void sort(int[] tab) { // Obtenir la longueur du tableau int n = tab.length; // Boucle externe pour le nombre de passages for (int i = 0; i < n - 1; i++) { // Boucle interne pour les comparaisons et les échanges for (int j = 0; j < n - i - 1; j++) { if (tab[j] > tab[j + 1]) { // Échanger tab[j] et tab[j + 1] int temp = tab[j]; tab[j] = tab[j + 1]; tab[j + 1] = temp; } } } } } // Déclarer la classe SelectionSort, qui implémente l'interface Sortable class SelectionSort implements Sortable { // Implémenter la méthode "sort" requise par l'interface Sortable public void sort(int[] tab) { // Obtenir la longueur du tableau int n = tab.length; // Boucle externe pour l'élément courant for (int i = 0; i < n - 1; i++) { int minIndex = i; // Boucle interne pour trouver l'élément minimum dans la // partie non triée du tableau for (int j = i + 1; j < n; j++) { if (tab[j] < tab[minIndex]) { minIndex = j; } } // Échanger tab[i] et tab[minIndex] int temp = tab[i]; tab[i] = tab[minIndex]; tab[minIndex] = temp; } } } // Déclarer la classe Main public class Main { public static void main(String[] args) { // Créer un tableau d'entiers à trier int[] tab = {5, 9, 2, 0, 7, 4, 1}; // Créer une instance de BubbleSort et effectuer le tri Sortable bubbleSort = new BubbleSort(); bubbleSort.sort(tab); System.out.print("Tri à bulles : "); afficherTab(tab); // Créer une instance de SelectionSort et effectuer le tri Sortable selectionSort = new SelectionSort(); selectionSort.sort(tab); System.out.print("Tri par sélection : "); afficherTab(tab); } // Méthode pour afficher les éléments d'un tableau private static void afficherTab(int[] tab) { for (int n : tab) { System.out.print(n + " "); } System.out.println(); } }
Sortie:
Tri à bulles : 0 1 2 4 5 7 9 Tri par sélection : 0 1 2 4 5 7 9
Exercice 9:
Écrivez un programme Java pour créer une interface 'Jouable' avec une méthode play() qui ne prend aucun argument et renvoie void. Créez trois classes Football, Volleyball et Basketball qui implémentent l'interface 'Jouable' et surchargent la méthode play() pour jouer les sports respectifs.
// Déclarer l'interface Jouable interface Jouable { // Déclarer la méthode abstraite "play" que les classes // implémentant cette interface doivent fournir void play(); } // Déclarer la classe Football, qui implémente l'interface Jouable class Football implements Jouable { public void play() { System.out.println("Jouer au football"); } } // Déclarer la classe Volleyball, qui implémente l'interface Jouable class Volleyball implements Jouable { // Implémenter la méthode "play" requise par l'interface Jouable public void play() { // Afficher un message indiquant que le volleyball est joué System.out.println("Jouer au volleyball"); } } // Déclarer la classe Basketball, qui implémente l'interface Jouable class Basketball implements Jouable { // Implémenter la méthode "play" requise par l'interface Jouable public void play() { // Afficher un message indiquant que le basketball est joué System.out.println("Jouer au basketball"); } } // Déclarer la classe Main public class Main { public static void main(String[] args) { // Créer des instances d'objets Jouable pour le football, le // volleyball et le basketball Jouable football = new Football(); Jouable volleyball = new Volleyball(); Jouable basketball = new Basketball(); // Appeler la méthode "play" sur chaque objet Jouable pour // jouer à différents sports football.play(); volleyball.play(); basketball.play(); } }
Sortie:
Jouer au football Jouer au volleyball Jouer au basketball
Exercice 10:
Écrire un programme Java pour créer une interface 'Encryptable' avec des méthodes encrypt (String data) et decrypt (String encryptedData) qui définissent les opérations de cryptage et de décryptage. Créez deux classes AES et RSA qui implémentent l'interface Encryptable et fournissent leurs propres algorithmes de cryptage et de décryptage.
// Importer les bibliothèques nécessaires pour les opérations cryptographiques import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.util.Base64; // Déclarer l'interface Encryptable interface Encryptable { // Déclarer la méthode abstraite "encrypt" que les classes // implémentant cette interface doivent fournir String encrypt(String data); // Déclarer la méthode abstraite "decrypt" que les classes // implémentant cette interface doivent fournir String decrypt(String encryptedData); } // Déclarer la classe AES, qui implémente l'interface Encryptable class AES implements Encryptable { // Définir l'algorithme AES comme une constante private static final String AES_ALGORITHM = "AES"; // Déclarer une clé secrète pour stocker la clé de chiffrement private SecretKey secretKey; // Constructeur pour initialiser la clé de chiffrement public AES() { try { KeyGenerator keyGen = KeyGenerator.getInstance(AES_ALGORITHM); // Chiffrement AES-128 keyGen.init(128); // Générer la clé de chiffrement AES secretKey = keyGen.generateKey(); } catch (Exception e) { e.printStackTrace(); } } // Implémenter la méthode "encrypt" requise par l'interface // Encryptable public String encrypt(String data) { try { Cipher cipher = Cipher.getInstance(AES_ALGORITHM); // Initialiser le cipher en mode chiffrement avec la clé // AES cipher.init(Cipher.ENCRYPT_MODE, secretKey); // Chiffrer les données byte[] encryptedBytes = cipher.doFinal(data.getBytes()); // Retourner la chaîne encodée en base64 des données // chiffrées return Base64.getEncoder().encodeToString(encryptedBytes); } catch (Exception e) { e.printStackTrace(); } return null; } // Implémenter la méthode "decrypt" requise par l'interface // Encryptable public String decrypt(String encryptedData) { try { // Décoder la chaîne base64 byte[] encryptedBytes = Base64.getDecoder().decode(encryptedData); Cipher cipher = Cipher.getInstance(AES_ALGORITHM); // Initialiser le cipher en mode déchiffrement avec la // clé AES cipher.init(Cipher.DECRYPT_MODE, secretKey); // Déchiffrer les données byte[] decryptedBytes = cipher.doFinal(encryptedBytes); // Retourner les données déchiffrées sous forme de chaîne return new String(decryptedBytes); } catch (Exception e) { e.printStackTrace(); } return null; } } // Déclarer la classe RSA, qui implémente l'interface Encryptable class RSA implements Encryptable { // Définir l'algorithme RSA comme une constante private static final String RSA_ALGORITHM = "RSA"; // Déclarer une paire de clés pour stocker la clé publique et la // clé privée private KeyPair keyPair; // Constructeur pour générer une paire de clés pour le // chiffrement et le déchiffrement public RSA() { try { KeyPairGenerator keyGen = KeyPairGenerator.getInstance(RSA_ALGORITHM); // Chiffrement RSA-2048 keyGen.initialize(2048); // Générer la paire de clés RSA (clé publique et privée) keyPair = keyGen.generateKeyPair(); } catch (Exception e) { e.printStackTrace(); } } // Implémenter la méthode "encrypt" requise par l'interface // Encryptable public String encrypt(String data) { try { // Obtenir la clé publique de la paire de clés PublicKey publicKey = keyPair.getPublic(); Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); // Initialiser le cipher en mode chiffrement avec la clé // publique cipher.init(Cipher.ENCRYPT_MODE, publicKey); // Chiffrer les données byte[] encryptedBytes = cipher.doFinal(data.getBytes()); // Retourner la chaîne encodée en base64 des données // chiffrées return Base64.getEncoder().encodeToString(encryptedBytes); } catch (Exception e) { e.printStackTrace(); } return null; } // Implémenter la méthode "decrypt" requise par l'interface // Encryptable public String decrypt(String encryptedData) { try { // Obtenir la clé privée de la paire de clés PrivateKey privateKey = keyPair.getPrivate(); // Décoder la chaîne base64 byte[] encryptedBytes = Base64.getDecoder().decode(encryptedData); Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); // Initialiser le cipher en mode déchiffrement avec la // clé privée cipher.init(Cipher.DECRYPT_MODE, privateKey); // Déchiffrer les données byte[] decryptedBytes = cipher.doFinal(encryptedBytes); // Retourner les données déchiffrées sous forme de chaîne return new String(decryptedBytes); } catch (Exception e) { e.printStackTrace(); } return null; } } // Déclarer la classe principale Main public class Main { public static void main(String[] args) { // Créer une instance de la classe AES pour le chiffrement et // le déchiffrement Encryptable aes = new AES(); // Chiffrer les données avec AES et stocker le résultat String encryptedDataAES = aes.encrypt("Contenu de test."); System.out.println("Cryptage AES: "+ encryptedDataAES); // Déchiffrer les données chiffrées avec AES et stocker le // résultat String decryptedDataAES = aes.decrypt(encryptedDataAES); System.out.println("Décryptage AES: "+ decryptedDataAES); // Créer une instance de la classe RSA pour le chiffrement et // le déchiffrement Encryptable rsa = new RSA(); // Chiffrer les données avec RSA et stocker le résultat String encryptedDataRSA = rsa.encrypt("Contenu de test."); System.out.println("Cryptage RSA: "+ encryptedDataRSA); // Déchiffrer les données chiffrées avec RSA et stocker le // résultat String decryptedDataRSA = rsa.decrypt(encryptedDataRSA); System.out.println("Décryptage RSA: "+ decryptedDataRSA); } }
Sortie:
Cryptage AES: niKcCYnOG60xG50v08qeI189fPrfF48SuevM+KaOris= Décryptage AES: Contenu de test. Cryptage RSA: o8x1jQT1yYKFEaQ8HvERJu7N9Mp/DZn7Xe2HgGixO6na8B1JdGSGUHJV6CYHTh5/kXhZmkz86+BMBXJO3mhyrHjD/wGacIF6DgEPwyqXu6JAkQSQ2pK0BY/ec+SFWepQdGsjP302fJseR+i6cFXd5+NDzau6Q8Xkd/KTDtej9ALGuqC9vbBv2PjFkeHf/TinlhlLWeZxUqLRZEJHVvYkbnm5lRDxXLRkwPx2p3+X7fIYXLHH2Qz2uyDJNoboA939wTMzXtbMCBKRJTIxfWjulHTaJya5H1v7jrAwIDXgi4PCeJ0VPzO4+R/LbqnCYqNvVj4X79+1H9pcXkTqP3lAKQ== Décryptage RSA: Contenu de test.
Éditeur de code Java: Testez votre code en ligne!
Testez vos connaissances – QCM Java corrigé – Partie 1QCM sur Java avec des réponses pour la préparation des entretiens d’embauche, des tests en ligne, aux examens et aux certifications. Ces questions et réponses…Lire plus
- Exercice Java Corrigé pour Débutant | Partie 1
- Exercice Java Corrigé pour Débutant | Partie 2
- Exercice Java Corrigé pour Débutant | Partie 3
- Exercice Java Corrigé pour Débutant | Partie 4
- Exercice Java Corrigé pour Débutant | Partie 5
- Exercice Java Corrigé pour Débutant | Partie 6
- Exercice Java Corrigé pour Débutant | Partie 7
- Exercice Java Corrigé pour Débutant | Partie 8
- Exercice Java Corrigé pour Débutant | Partie 9
- Exercice Java Corrigé pour Débutant | Partie 10
- Exercice Java Corrigé – Méthodes Récursives
- Exercice Java Corrigé sur les Collections – Arraylist – Partie 1
- Exercice Java Corrigé sur les Collections – Arraylist – Partie 2
- Exercice Java Corrigé sur les Collections – Arraylist – Partie 3
- Exercice Java Corrigé sur les Collections – Arraylist – Partie 4
- Exercice Java Corrigé sur les Collections – LinkedList – Partie 1
- Exercice Java Corrigé sur les Collections – LinkedList – Partie 2
- Exercice Java Corrigé sur les Collections – LinkedList – Partie 3
- Exercice Java Corrigé sur les Collections – HashSet
- Exercice Java Corrigé sur les Collections – TreeSet – Partie 1
- Exercice Java Corrigé sur les Collections – TreeSet – Partie 2
- Exercice Java Corrigé sur les Collections – PriorityQueue
- Exercice Java Corrigé sur les Collections – HashMap
- Exercice Java Corrigé sur les Collections – TreeMap
- Exercices corrigés Java POO – Constructeurs
- Exercices corrigés Java – Programmation Orientée Objet | Partie 1
- Exercices corrigés Java – Programmation Orientée Objet | Partie 2
- Exercices corrigés Java – Programmation Orientée Objet | Partie 3
- Exercices corrigés Java – Programmation Orientée Objet | Partie 4
- Exercices corrigés Java – Programmation Orientée Objet | Partie 5
- Exercices corrigés Java – Programmation Orientée Objet | Partie 6
- Exercice Java Corrigé sur POO – Polymorphism
- Exercice Java Corrigé – POO – Interfaces
- Exercice Java Corrigé – POO – Classe Abstraite
- Exercice Java Corrigé – POO – Classes Imbriquées
- Exercices corrigés Java les classes et l’héritage – Partie 1
- Exercices corrigés Java les classes et l’héritage – Partie 2
- Exercice Java Corrigé – Gestion Des Exceptions