CHECKSUM MD5 D'UN FICHIER C

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 22 nov. 2006 à 19:39
querb Messages postés 1 Date d'inscription mercredi 8 avril 2015 Statut Membre Dernière intervention 8 avril 2015 - 8 avril 2015 à 20:07
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40389-checksum-md5-d-un-fichier-c

querb Messages postés 1 Date d'inscription mercredi 8 avril 2015 Statut Membre Dernière intervention 8 avril 2015
Modifié par querb le 8/04/2015 à 20:08
Les .xlsx et les .docx ne sont ni plus ni moins que des sortes "d'archives" de fichiers .xml. Pas étonnant que le programme plante.

Sinon, j'ai essayé de le compiler sous linux, et le programme marche très bien. Par contre, un Makefile aurait été grandement apprécié (je met le mien à la fin du post)

Apparemment, il semble fonctionner correctement, mais peut-on l'utiliser dans un projet, et sous quelle licence ?

=====================

Makefile (C'est le Makefile.win modifié et simplifié, je n'ai pas vérifié si cette version fonctionne dans TOUS les cas.) :

# Project: MD5FileHash
# Makefile created by Dev-C++ 4.9.9.2
# Modified for Linux use

CPP = g++
CC = gcc
OBJ = obj/main.o obj/md5.o
LINKOBJ = obj/main.o obj/md5.o
LIBS = -Lm
BIN = bin/MD5FileHash

all: $(BIN)

$(BIN): $(OBJ)
$(CC) $(LINKOBJ) -o $(BIN) $(LIBS)

obj/main.o: main.c
$(CC) -c main.c -o obj/main.o $(CFLAGS)

obj/md5.o: md5.c
$(CC) -c md5.c -o obj/md5.o $(CFLAGS)
le code ça marche avec l'extension .xls .docx ?? le programme se plante qd j'utilise ce type de fichier
damien174 Messages postés 78 Date d'inscription jeudi 4 janvier 2001 Statut Membre Dernière intervention 2 mars 2012
12 sept. 2011 à 14:55
Merci ca marche niquel en C sous linux sans retouche :)

merci
xtremejames183 Messages postés 32 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 14 avril 2009
19 sept. 2010 à 15:54
Salut, en ce qui concerne les gros fichiers tu devrais utilise les appelles systémes de ton OS au lieu de passer par la libC (fread,fopen,...).
En gros si tu es sous windows utilise ReadFile()/WriteFile() si tu es sous UNIX utilise read()/write.
Utilisateur anonyme
18 mars 2010 à 10:30
Trés bien! mais quand je veux le MD5 d'un "gros" fichier (300mo) le programme plante....

As tu une idée pour améliorer ton programme....

Merci
nutz007 Messages postés 3 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 18 octobre 2007
18 oct. 2007 à 13:10
Hello
Ce source a l'air très bien fait. Cependant, qqch me bloque ... Ne faudrait-il pas faire un "delete data" après le calcul du md5 ??
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
22 nov. 2006 à 19:57
Houlalalaaa cava pas moi c'est temps si. c'est bon j'ai capté lol md5_byte_t sur 8bits * 16 = 128 bits, et la boucle sert à remetre le tout en hexa . lol
xtremejames183 Messages postés 32 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 14 avril 2009
22 nov. 2006 à 19:56
http://www.faqs.org/rfcs/rfc1321.html
Tu trouveras ton bonheur et tes questions sur le fonctionnemnt de Message Digest 5

la boucle sert a imprimer le Hash dans la variable HEX_DATA c'la ou le hash est generer en hexa.
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
22 nov. 2006 à 19:39
Utile, mais manque de commentaire. :D

J'ai 2-3 questions :

- A quoi sert c'est variable de 16 bytes ? md5_byte_t digest[16]; ? que contient t-elle apres md5_append ? car le MD5 étant sur 128 bits (32 en hexa) je me demande ce qu'elle contient, surtout que c'est dedans que ce trouve le résultat :D

- Pourquoi cette boucle ? :

int i=0;
for(i;i<16;i++){
snprintf(HEX_DATA+i*2,sizeof(HEX_DATA),"%02x",digest[i]);
}
Rejoignez-nous