Projet C Ripper
Projet en C. Professeur : M. Cousi
Description
Le projet ripper est un programme permettant :
- Générer des condensats (mode GENERATE) à partir d'un fichier texte
- Rechercher parmi une liste de condensats dans une table de correspondance
Les fonctionnalités du programme :
- Générer une liste de condensats (Md5) à partir d'un fichier texte en clair. Le programme génèrera les résultats dans un fichier nommé "output.txt". Il n'est pas possible pour le moment de choisir le nom de ce fichier.
- Retrouver une liste de clair à partir d'un fichier en entrée. Le programme effectuera la recherche à partir du fichier généré précedemment (output.txt)
- Libération totale de la mémoire après utilisation du programme (outil utilisé : valgrind)
Algorithme utilisé pour le mode de recherche (lookup) :
Lors de la recherche, chaque élément (condensat:clair) est enregistré en mémoire dans une structure. Une structue est ensuite destiné à être stocké dans un tableau de pointeurs. Afin de répartir correctement les éléments dans le tableau, leur index est généré à l'aide de l'algorithme de Jenkins (https://en.wikipedia.org/wiki/Jenkins_hash_function). Lors d'une collision (deux elements possèdant le même index), nous stokons les éléments les uns à la suite des autres grâce à une liste chaînée.
Pour plus de détails : https://en.wikipedia.org/wiki/Hash_table
Installation
Le projet entier a été intégré dans une image docker. L'image porte le nom de anguyen_projet_c_docker.tar
Il suffira l'utilisateur de charger l'image à travers la commande : sudo docker load -i anguyen_projet_c_docker.tar
Une fois l'image chargée, l'utilisateur devra lancer un shell : sudo docker run -i -t anguyen_projet_c_docker
L'utilsateur aura directement accès au contenu du projet.
Note : Le code source du programme est également diponible indépendamment de l'image Docker (dans le répertoire src
de ce dépôt).
Usage
Pour le mode GENERATE :
- La commande est
./ripper -g [fichier_source]
(ne pas de mettre de guillemets) où[fichier_source]
est le fichier dont on souhaite générer les condendats. Ces derniers seront disponibles dans un fichier "output".txt - Un échantillon de mots en clair est placé dans le répertoire du projet (rockyou.txt)
Pour le mode LOOKUP :
-
La commande est :
./ripper -g [fichier_source]
(ne pas de mettre de guillemets) où[fichier_source]
est le fichier composé de condensats dont on souhaite retrouver le(s) clair(s). -
Un échantillon "file_input.txt" est placé dans le répertoire du projet. Cependant, il peut avoir différent nom, il suffira ainsi de mettre le bon nom dans l'argument
-
Le fichier sur lequel s'effectuera sera automatiquement le fichier "output.txt" généré précedemment
-
Il faut respecter le format du fichier en entrée : un condensat par ligne