Somme md5 en c

Fermé
pandageek Messages postés 359 Date d'inscription samedi 6 août 2011 Statut Membre Dernière intervention 27 mai 2014 - 25 sept. 2012 à 18:27
 Utilisateur anonyme - 11 oct. 2012 à 10:52
Bonjour,
j'aimerai un code qui me permettrai de calculer la somme md5 d'un fichier dans mon programme C
merci à vous ;)

A voir également:

11 réponses

[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
Modifié par [Dal] le 26/09/2012 à 15:09
Salut pandageek,

La proposition d'Augustin utilise la bibliothèque OpenSSL.

Si tu veux éviter cette dépendance, tu peux utiliser une implémentation autonome de l'algorithme.

Il y a une implémentation de référence en C qui figure dans la RFC qui définit "MD5 Message-Digest Algorithm" http://www.ietf.org/rfc/rfc1321.txt

Tu as dedans des codes sources en C de test de l'implémentation, dont notamment une qui calcule la somme md5 d'un fichier. Vois la licence, c'est copyright RSA (il faut les citer, entre autres obligations).

Il y a d'autres implémentations : http://crazyjoke.free.fr/md5/ propose un md5.c, md5.h et un programme de test montrant aussi comme l'utiliser avec un fichier. Attention, celle-là est sous GNU GPL v2.

Celle-ci, est sous une licence de type BSD : https://sourceforge.net/projects/libmd5-rfc/files/ très libérale. Elle est réalisée par le créateur de Ghostscript, L. Peter Deutsch.


Dal
1
pandageek Messages postés 359 Date d'inscription samedi 6 août 2011 Statut Membre Dernière intervention 27 mai 2014 4
26 sept. 2012 à 20:50
comment utilise t on les deux dernières bibliothèques que tu donne?
0
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
Modifié par [Dal] le 26/09/2012 à 23:05
Salut,

Pour celle de L. Peter Deutsch, j'ai adapté l'exemple qu'il donne md5main.c (qui se contente d'utiliser la librairie pour effectuer les tests de la RFC), pour faire une fonction get_md5_from_str.

voilà le code de mon mymd5.c :

#include "md5.h" 
#include <math.h> 
#include <stdio.h> 
#include <string.h> 

/* 
 * compilation: gcc -o mymd5 -lm mymd5.c md5.c 
 */ 

typedef char MD5_HASH_HEX[16*2 + 1]; 

void get_md5_from_str(char * tested_st, MD5_HASH_HEX * hex_output) 
{ 
    md5_state_t state; 
    md5_byte_t digest[16]; 
    int di; 

    md5_init(&state); 
    md5_append(&state, (const md5_byte_t *)tested_st, strlen(tested_st)); 
    md5_finish(&state, digest); 
    for (di = 0; di < 16; ++di) 
        sprintf((char *)hex_output + di * 2, "%02x", digest[di]); 
} 


int main() 
{ 
    char a_string[] = "abc"; 
    MD5_HASH_HEX hex_output; 

    get_md5_from_str(a_string, &hex_output); 
    puts((char *)hex_output); 
    return 0; 
}

Par exemple.


Dal
0
pandageek Messages postés 359 Date d'inscription samedi 6 août 2011 Statut Membre Dernière intervention 27 mai 2014 4
30 sept. 2012 à 14:00
comment dois-je inclure md5.c et md5main.c?
ou comment dire à code blocks de les compiler

ps : je suis passé sous windows
0
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
1 oct. 2012 à 11:40
Salut Pandageek,

- tu crées un projet sous Codeblocks
- tu copies md5.c et md5.h dans le répertoire du projet avec l'explorateur Windows
- dans Codeblocks, tu fais clic droit sur le nom du projet dans l'arborescence et tu cliques "add files..."
- tu ajoutes md5.c et md5.h, confirme l'ajout dans les cibles debug et dans release
- dans ton main.c, fait un copier coller du code ci-dessus (ou du code contenu dans md5main.c, si c'est ce que tu veux, mais md5main.c ne fait que les tests standard contenus dans la définition de la norme MD5).


Dal
0
augustin45 Messages postés 134 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 20 novembre 2012 31
25 sept. 2012 à 18:35
je sais pas toi, mais google est mon ami:
http://www.yoannsculo.fr/faire-un-hash-md5-dun-string-en-c/
0
pandageek Messages postés 359 Date d'inscription samedi 6 août 2011 Statut Membre Dernière intervention 27 mai 2014 4
25 sept. 2012 à 18:39
pas une chaine, un fichier
0
augustin45 Messages postés 134 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 20 novembre 2012 31
25 sept. 2012 à 18:41
ah pardon
eh bien ouvre le fichier et enregistre le dans une chaine ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pandageek Messages postés 359 Date d'inscription samedi 6 août 2011 Statut Membre Dernière intervention 27 mai 2014 4
25 sept. 2012 à 18:42
et s'il est compilé? ça marche?
0
augustin45 Messages postés 134 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 20 novembre 2012 31
25 sept. 2012 à 18:45
si quoi est compilé?
un fichier contient des informations enregistrées en binaire, toutes les extentions utilisent ce principe
l'extention n'est pas un encodage en elle meme, mais sert aux programmes de différencier les roles des différents fichiers.
tu peut donc ouvrir n'importe quelle extention de fichier et afficher ce que le fichier contient sous forme de texte. ce texte peut donc etre hashé quelle que soit l'extention du fichier
0
pandageek Messages postés 359 Date d'inscription samedi 6 août 2011 Statut Membre Dernière intervention 27 mai 2014 4
25 sept. 2012 à 18:46
il est compilé en C.
je devrai pouvoir l'ouvrir avec un éditeur de texte alors non?
0
augustin45 Messages postés 134 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 20 novembre 2012 31
25 sept. 2012 à 18:49
bien sur, mais ce n'est pas en faisant clique droit dessus que tu y arrivera car windows n'en voit pas l'utilité^^
mais tu ouvre le bloc note, ensuite tu déplaces le fichier dans le cadre à texte du bloc note
et après un bref chargement, un charabiat s'affichera
ne pense pas y comprendre quelque chose
eh ce que tu appelle fichier compilé en C tu parles bien d'un *.exe?
0
pandageek Messages postés 359 Date d'inscription samedi 6 août 2011 Statut Membre Dernière intervention 27 mai 2014 4
25 sept. 2012 à 18:50
je suis sous linux alors il s'appelle juste main, mas c'est bien un executable
0
augustin45 Messages postés 134 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 20 novembre 2012 31
25 sept. 2012 à 18:57
ok ca doit etre la meme manip sous linux pour voir le .exe en "texte"
mais ce n'est pas tout cela qui nous intéresse: donc essaye le code sur la page que j'ai cité plus haut et dis moi ce que tu obtent
0
Utilisateur anonyme
10 oct. 2012 à 23:12
0
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
11 oct. 2012 à 10:20
Cool, merci Saachaa :-)
0
Utilisateur anonyme
11 oct. 2012 à 10:52
De rien :-)

Je suis tombé ici par hasard car je souhaite faire la même chose, c'est qu'il référence vite Google !
0