Hash md5 d'une chaine ou d'un fichier (de taille quelconques) {vc++ 7.0}

Soyez le premier à donner votre avis sur cette source.

Vue 9 181 fois - Téléchargée 886 fois

Description

Ce prog calcule le checksum md5 d'une chaine ou d'un fichier (peu importe la taille, meme le hash d'un très gros fichier fonctionne très bien).
Ci-dessous, les 2 fonctions en C que j'ai adapté dans le prog C++ pour faire l'interface graphique.

Source / Exemple :


char *md5_str(char *p)
{
    md5_state_t state;
    md5_byte_t digest[16];
    char *hex_output = (char *)malloc(33);
    int di;
    
    //hashage
    md5_init(&state);
    md5_append(&state, p, strlen(p));
    md5_finish(&state, digest);
    
    //output
    for (di = 0; di < 16; di++){
	    sprintf(hex_output + di * 2, "%02x", digest[di]);
    }    
    return hex_output;
}

char *md5_file(FILE *fp)
{
    md5_state_t state;
    md5_byte_t digest[16];
    char *hex_output = (char *)malloc(33);
    char data[64];
    int di, ln;
    
    //hashage
    md5_init(&state);
    while(!feof(fp))
    {
        ln = fread(data, 1, sizeof(data), fp);
        md5_append(&state, data, ln);
    }
    md5_finish(&state, digest);
    
    //output
    for (di = 0; di < 16; di++){
	    sprintf(hex_output + di * 2, "%02x", digest[di]);
    }    
    return hex_output;
}

int filecmp(FILE *f1, FILE *f2)
{
    char hash1[33], hash2[33];
    strcpy(hash1, md5_file(f1));
    strcpy(hash2, md5_file(f2));
    return strcmp(hash1, hash2);
}

Conclusion :


Désolé pour les fonctions C du style sprintf, fopen ou autre, mais j'ai adapté mon code en C pour faire une interface graphique. Vous pourrez vous contenter des 2 fonctions ci-dessus mais le projet complet se trouve dans le zip...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

albert0
Messages postés
249
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
9 août 2008
-
salut,

sa sert a quoi enfet?

j'ai pas tres bien compris
kod32
Messages postés
46
Date d'inscription
mercredi 5 mai 2004
Statut
Membre
Dernière intervention
13 novembre 2004
-
à calculer le checksum md5 d'un fichier ou d'une chaine de caractère. Le hash md5 est le plus employé pour la comparaison de fichiers car il est très sensible. En effet le simple changement d'un caractère ou le remplacement d'une majuscule en minuscule ou autre fait changer tout le hash donc très précis.
kronemburg
Messages postés
18
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2005
-
J'aimerai bien que ça marche !
j'ai :
char *md5_str(char *p)
{
md5_state_t state;
md5_byte_t digest[16];
char *hex_output = (char *)malloc(33);
int di;

//hashage
md5_init(&state);
md5_append(&state, (const md5_byte_t *)p, (int)strlen(p));
md5_finish(&state, digest);

//output
for (di = 0; di < 16; di++){
sprintf(hex_output + di * 2, "%02x", digest[di]);
}
return hex_output;
}

J'utilise dev-cpp 4.9.9.2 et il me retourne lors de la copilation :
[Linker error] undefined reference to `md5_init'
[Linker error] undefined reference to `md5_append'
[Linker error] undefined reference to `md5_finish'
ld returned 1 exit status

Que faire please ??!
Amicalement
cs_tigzy
Messages postés
2
Date d'inscription
vendredi 22 octobre 2010
Statut
Membre
Dernière intervention
4 novembre 2010
-
Le MD5 renvoyé est incorrect on dirait

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.