TP03 2 Crunch
TP03 2 Crunch
TP03 2 Crunch
02 octobre 2024 2
Crunch - Programmation C++ Linux | Gilles Dalles
INTRODUCTION
On reste dans le cadre des mots de passe mais cette fois, on va recréer un programme déjà
disponible sous Linux (en natif sous Kali, installable sur les autres) : Crunch.
Ce logiciel permet de générer toutes les combinaisons possibles à partir d’un alphabet en
fonction d’un nombre minimal et d’un nombre maximal de caractères.
CRUNCH
DIAGRAMMES UML
CAS D'UTILISATION
La petite particularité ici, sera que l’alphabet et les nombres de caractères min et max seront
passés en paramètres du programme, autrement dit, en paramètre du main.
02 octobre 2024 3
Crunch - Programmation C++ Linux | Gilles Dalles
SÉQUENCE
Le diagramme de séquence est plutôt simple ici, apparait juste une boucle. J’aurais pu être
plus précis mais je vous laisse une certaine liberté de codage tant qu’on retrouve l’esprit de
ce diagramme.
PRÉREQUIS
CONDITION
C’est déjà écrit plus haut mais il faut passer en paramètres du programme l’alphabet et les
nombres min et max de caractères.
Pour être plus explicite, c’est exactement ce qu’il se passe lorsque vous tapez cette commande
dans votre terminal :
FONCTION MAIN
ARGC, ARGV
La fonction main() peut prendre 2 paramètres. Je ne pense pas trop me tromper en pensant
que peu voire aucun d'entre vous ne s'est posé la question:
Jusqu’à présent, les fonctions main() que l’on a écrites était basées sur le prototype suivant :
int main() ;
02 octobre 2024 4
Crunch - Programmation C++ Linux | Gilles Dalles
argc et argv sont les seuls paramètres possibles. Le premier donne le nombre d'arguments du
programme (e.g. ./monProg arg1 arg2). Si il se nomme argc, c'est qu'il y a une raison (arg:
argument, c: count).
Le second concerne les arguments eux-mêmes. Il s'agit d'un tableau stockant tous les
arguments. (arg: argument, v: values). Il suffit de lire le tableau pour en connaitre la valeur.
Attention, tous les arguments sont des chaines de caractères. Cela implique une conversion.
Dans un premier temps, votre source doit être capable de récupérer un argument et de vous
l'afficher. Si aucun argument n'est passé, vous devez demander à l'utilisateur l’alphabet et les
nombres min et max de caractères.
A savoir:
Une chaine de caractères n'est rien d'autre qu'un tableau de caractères. Le dernier caractère
stocké est forcément '\0' (valeur décimale 0); on dit qu'il est le caractère de fin de chaine.
argv s'apparente dès lors à un tableau 2 dimensions de caractères, la première case indiquant
l'argument, le second le caractère.
La question s’est évidemment posée bien avant votre naissance sur comment réaliser cette
conversion et des solutions toutes prêtes existent. Mais par pure bonté, je vous oblige à
réinventer la roue : vous devez m’écrire une fonction convASCII2Int(). Les plus perspicaces se
seront rendu compte qu’elle n’apparait pas dans le diagramme de séquence.
02 octobre 2024 5
Crunch - Programmation C++ Linux | Gilles Dalles
TRAVAIL À RÉALISER
Comme aux TPs précédents, la première chose à faire est la fiche de tests (ou de recette). Je
ne vous fournit rien, c’est à vous de le faire.
Vous devez écrire la fonction crunch(). Son type de retour et ses paramètres sont à votre
discrétion. Exceptionnellement, je vous autorise à faire une sortie écran dans cette fonction
uniquement.
ATTENTION
A chaque séance, vous devrez faire une sauvegarde de votre travail sur Github avec Github
Desktop. Ne pas le faire vous vaudra un 0. Ne pas avoir de fiche de tests aura un impact
négatif sur votre note.
02 octobre 2024 6