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

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

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.