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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define gdr_md5 500
int main(int argc, char *argv[])
{
FILE *bdd = NULL;
bdd = fopen("bdd.md5", "r");
char hash[gdr_md5] = "";
char user_hash[gdr_md5] = "";
char *result = NULL;
printf ("\t==================== ");
printf ("\n\t== CASSEUR DE MD5 == ");
printf ("\n\t==================== ");
if (bdd != NULL)
{
fgets (hash, gdr_md5, bdd);
printf ("\n\n\n Veuillez entrer le hash md5 : ");
/* -ed-
scanf ("%s", &user_hash);
avec scanf(), "%s" attend l'adresse d'un char et non d'un tabe&au de char...
*/
scanf ("%s", user_hash);
while (fgets(hash, gdr_md5, bdd) != NULL)
{
sprintf(*result, "%s", strstr(hash, user_hash));
/* -ed-
'*result' invoque un comportement indetermine (result valant NULL).
De plus, c'est un char, ce qui n'est pas le type attendu par le premier
parametre de sprintf(). En consequences, le comportement est indetermine
si strstr() retourne NULL, le comportement est indetermine.
Bref, ce code est gravemebt bugge...
*/
}
printf ("\n\n Le resultat est : \n\n %s", *result);
/* -ed- encore une fois, *result n'a aucun sens.
Un pointeur NULL ne va pas, comme par magie, se metre à pointer
vers une zone valide... Il faut unt affectation correcte...
*/
fclose(bdd);
}
else
{
printf("\n\n Impossible de lire la base de donne\n\n");
}
return 0;
} |
Partager