Skip to content

Latest commit

 

History

History
95 lines (59 loc) · 2.93 KB

File metadata and controls

95 lines (59 loc) · 2.93 KB

TP C++ n°10

Chiffrement XOR

Le chiffrement XOR est simple, réversible et bien adapté pour introduire la programmation orientée objet sur un cas concret de traitement binaire.

Objectif

Réaliser une classe CrypteurXOR héritant de Crypteur pour chiffrer et déchiffrer des fichiers avec l'opération XOR.

Notions C++ mobilisées

  • classes abstraites ;
  • héritage et polymorphisme ;
  • redéfinition de méthodes ;
  • flux binaires fichiers.

Pré-requis

Travail demandé

On désire créer une classe CrypteurXOR déclarée dans le fichier xor.h et implémentée dans le fichier xor.cxx. Cette classe héritera de la classe abstraite Crypteur (fichiers crypteur.h et crypteur.cxx). Le diagramme de classes UML est le suivant (fstream est une classe déclarée dans <fstream> et permet de gérer les fichiers de données) :

Diagramme de classes réalisé avec https://www.planttext.com

La fonction membre chiffrer doit répondre au prototype suivant :

void chiffrer(const string fichierEntree, const string fichierSortie);

1. Algorithmes

Donner en pseudolangage l'algorithme de la fonction chiffrer. Justifier le type des variables choisies.

2. Implémentation de la classe

Implémenter en C++ les classes Crypteur et CrypteurXOR.

3. Test de la classe

Valider la classe en chiffrant le fichier texte.txt. Le fichier destination sera nommé texte.$$$. Éditer le fichier chiffré à l'aide d'un éditeur hexadécimal et vérifier son intégrité par rapport à l'algorithme XOR. Vérifier la fonction inverse en déchiffrant texte.$$$ en texte.ok.

4. Validation de réversibilité

Vérifier explicitement que texte.ok est identique à texte.txt.

Contraintes techniques

  • Compilateur GNU C++ ;
  • Système d'exploitation Linux, Mac OS X ou Ms-Windows ;
  • Standard recommandé : C++11 ou supérieur.

Exemples d'entrée/sortie

Exemple :

  • entrée : texte.txt + clé password ;
  • sortie chiffrée : texte.$$$ ;
  • sortie déchiffrée : texte.ok.

Résultat attendu : texte.ok identique à texte.txt.

Compilation

g++ -std=c++11 -Wall -Wextra -o test_xor test_xor.cxx xor.cxx crypteur.cxx

Livrables

  • crypteur.h, crypteur.cxx ;
  • xor.h, xor.cxx ;
  • test_xor.cxx ;
  • README.md (compilation, protocole de test, preuve de réversibilité).

Extensions possibles (bonus)

  • Ajouter un second algorithme à l'aide d'une nouvelle classe dérivée.
  • Ajouter des tests automatiques sur fichiers vides et tailles de clé variées.

Critères d'évaluation

  • Qualité et organisation des documents rendus (codes sources, README, etc.) ;
  • Exactitude chiffrement/déchiffrement ;
  • Qualité de la conception objet ;
  • Robustesse E/S et qualité des tests ;
  • Autonomie.