Bonsoir,

pour un projet de C, je dois écrire un programme qui casse les mots de passe de la forme [a-z0-9] pouvant aller de 1 à 8 caractères.

J'ai réalisé le code qui me permet de trouver des mots de passe de 1 caractère

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1 #include <unistd.h> /* pour crypt *  
2 #include <stdio.h> /* pour printf */ 
3 #include <string.h> /* pour strcmp et strlen */
4 int main(void) 
5 {
6 int i = 0;
7 int longueur = 36; 
8 char chaine[2] = {'x','\0'}; 
9 char tableau[36] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'    
,'q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9'};
10 
11 char hachedpwdWithoutSalt [] =
12 "0HHtSA4cVzz0G2I.gswgTG93A8rvH5HCyWsjdMfomNSfiPmsPXGqq5EYfLlS1rEf9bOl6Ho8w1zdV/C2sv    
/B/."; 
13 
14 for (i=0; i<longueur; i++)
15 {
16 chaine[0] = tableau[i];
17 
18 if ( strcmp( crypt(chaine, "$6$QSX8hjVa$") + strlen("$6$QSX8hjVa$"),
19 hachedpwdWithoutSalt )
20 == 0 ){
21 printf("mdp du root craque ----> %s\n", chaine);
22 break;
23}
24 else
25 printf("mdp du root pas encore craque!!\n");
26 }
27 return 0;
28 }
J'ai également un fichier texte comportant les mots de passe hachés que je dois donc décrypter:

Longueur 1:
type et salt: $6$QSX8hjVa$
mdp haché sans salt: 0HHtSA4cVzz0G2I.gswgTG93A8rvH5HCyWsjdMfomNSfiPmsPXGqq5EYfLlS1rEf9bOl6Ho8w1zdV/C2sv/B/.

Longueur 2:
type et salt: $6$QSX8hjVa$
mdp haché sans salt: gNPp/B3vf8UUotZQ8kB9MbZvC9XWBSU6yEykbEGSYoaW2Z7NEfcivrWWt9kPSuWB0TwdzbO51lRqRCBVmNYgR0

Longueur 3:
type et salt: $6$QSX8hjVa$
mdp haché sans salt: Sb6pCN8KN1u9aUfYOLt2cQx4l61YHBz7kjTFS0A7pdDs1r0Xmm3nW7meyy9Fyt6e.JhkbN4zwaHC6whN9vP/..

Longueur 4:
type et salt: $6$QSX8hjVa$
mdp haché sans salt: R..F1fyDnsTOy1g8jk5eupizgPcpkt1uZnFF0BP0bjEuhVbA01J3LFjzVdh.nuSDmFbHShDaYXQK.5OC47Tr70

Longueur 4:
type et salt: $6$QSX8hjVa$
mdp haché sans salt: Oj9IAu50jSsAAm62MOo63Ea4p1o8DC0zcR6I8N5f4jRgE0Bv0WRFEJwO4hGxAAMyOF2ON5Dwze2InWV9nDWVm1

Longueur 5:
type et salt: $6$QSX8hjVa$
mdp haché sans salt: nWgWe1FPL5XZqbEkdrkAX2bLfxvtD84rHaJ2jV7V.34U0txSUdYDC7PTDooxHIi0uJc7XcyUqgPfYIFPGiApE0

Longueur 6:
type et salt: $6$QSX8hjVa$
mdp haché sans salt: FGFMnq/y2zcEKz2NLVoWolGI7bG3s.bxf0NJFYunhng7bCGhfAbtmsqcsaCW5tIFPBh0XVSrQxfW66XwUCYQ8.

Longueur 6:
type et salt: $6$_SX5gjVa$
mdp haché sans salt: H3YBkLGM.OhpGRMtlwplT.wClyZEyhWhO1JB0GqmiM603CRYjL5tLU8IWhje1oSW7URGOIRVf/gPVIXWr37WK1

Longueur 7:
type et salt: $6$QSX8hjVa$
mdp haché sans salt: Iqh9UUWWMXzf7hzZ309httUrebuH1vCGirtR0r3i0RFvH0wc0UaQVnUXMOdUbQsBM1ssmdbaUzcyvPTfRB4km0

Longueur 8:
type et salt: $6$QSX8hjVa$
mdp haché sans salt: R6oPGKiym3490f4q9P5I1MIeAXVpL8KP%9EssLtusurP2aezPMdq9vgo3qWguWrFfctdkQXO2iXqI8ks5NCplD/
Pour la longueur 1 j'ai trouvé le mot de passe "h"
Pour la longueur 2 j'ai trouvé le mot de passe "j5"
Pour la longueur 3 j'ai trouvé lemot de passe "f47" (mais je n'en suis pas sûr)

Mon but serait désormais de permettre à l'utilisateur d'entrer une longueur comprise entre 1 & 8, et selon la longueur choisie, la script ira chercher le hach du mot de passe et le comparera au salt afin de trouver le mot de passe de longueur N (où N étant la longueur choisie par l'utilisateur).

J'espère que quelqu'un pourra m'aider car je ne suis que débutant en C, et j'avoue que je ne vois pas trop comment m'y prendre.

Merci, toute aide que vous pourrez m'apporter sera bonne à prendre