begin process at 2012 05 27 14:21:04
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > CHECKSUM MD5 D'UN FICHIER C

CHECKSUM MD5 D'UN FICHIER C


 Information sur la source

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Classé sous :md5, hash, checksum, fichier Niveau :Débutant Date de création :19/11/2006 Date de mise à jour :19/11/2006 22:50:33 Vu / téléchargé :18 123 / 853

Auteur : xtremejames183

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Voila le code effectue un checksum d'un fichier de n'importe quelle taille definie dans le predecesseur MAX_BUF et retourne le code hexa du hash dans le fichier CHECKSUM.MD5.
L'algorithme fonctionne comme suit:
                        * On lit le fichier grace a la fonction  readFile qui retourn un pointeurs char
                         et alloue dynamiquement de la memoire et effectue un controle
                        * Le hashage MD5 du fichier s'effectue selon la norme RFC 1321
                      
                        * Sauvgarder le hash dans CHECKSUM.MD5

marche impec sous WINDOWS LINUX BSD

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <stdbool.h>
  • #include <string.h>
  • #include <errno.h>
  • #include <ctype.h>
  • #include "md5.h"
  • //buffer maximum
  • #define MAX_BUF 1024
  • //lire le fichier
  • char *readFile( FILE *fp);
  • //generer le hash et imprimer dans CHECKSUM.MD5
  • bool hash_md5_file(const char *file);
  • //strcpy prudent
  • char *strCopy( char * str );
  • int main(int argc, char *argv[])
  • {
  • if(!hash_md5_file("../main.c")){
  • perror("fichier:");
  • }else{
  • puts("Hashage...OK");
  • }
  • #ifdef WIN32
  • getch();
  • #endif
  • return 0;
  • }
  • char *readFile( FILE *fp )
  • {
  • if( !fp )
  • {
  • return NULL;
  • }
  • char *output = NULL;
  • char buf[ MAX_BUF ];
  • int bytes, byteCount = 0;
  • memset( buf, 0, sizeof( buf ) );
  • while( ( bytes = fread( buf, sizeof( char ), sizeof( buf ) - 1, fp ) ) > 0 )
  • {
  • if( !output )
  • {
  • /* allocate output */
  • output = ( char * )malloc( bytes + 1 );
  • memcpy( output, buf, bytes + 1 );
  • }
  • else
  • {
  • /* deja existe - reallocate! */
  • char *oldStr = strCopy( output );
  • output = ( char * )realloc( output, byteCount + bytes + 1 );
  • memcpy( output, oldStr, byteCount );
  • free( oldStr );
  • memcpy( output + byteCount, buf, bytes + 1 );
  • }
  • byteCount += bytes;
  • memset( buf, 0, sizeof( buf ) );
  • }
  • return output;
  • }
  • bool hash_md5_file(const char *file)
  • {
  • /* ****Lire le fichier
  • ***retourner un pointeur qui contient
  • les donnees
  • ***md5 hash
  • ***imprimer le hex code dans le fichier CHECKSUM.MD5
  • */
  • FILE *fp,*out;
  • char *data;
  • char output[]="CHECKSUM.MD5";
  • static char HEX_DATA[31];
  • md5_state_t state;
  • md5_byte_t digest[16];
  • if(file==NULL){
  • return false;
  • }
  • fp=fopen(file,"rb");
  • if(fp==NULL){
  • return false;
  • }
  • data=readFile(fp); //malloc and memset sont effectuer dans ===>readFile()
  • if(data==NULL){
  • return false;
  • }
  • //MD5 HASH ALGORITHM
  • md5_init(&state);
  • md5_append(&state,(const md5_byte_t *)data,strlen(data));
  • md5_finish(&state,digest);
  • int i=0;
  • for(i;i<16;i++){
  • snprintf(HEX_DATA+i*2,sizeof(HEX_DATA),"%02x",digest[i]);
  • }
  • fclose(fp);
  • out=fopen(output,"a+");
  • if(out==NULL){
  • return false;
  • }
  • fprintf(out,"MD5 (%s)= ",file);
  • fprintf(out,"%s\n",HEX_DATA);
  • //clean && close
  • fflush(out);
  • fclose(out);
  • return true;
  • }
  • char *strCopy( char * str )
  • {
  • if( !str )
  • {
  • return NULL;
  • }
  • char *n = ( char * )malloc( strlen( str ) + 1 );
  • memcpy( n, str, strlen( str ) + 1 );
  • return n;
  • }
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>

#include "md5.h"
//buffer maximum
#define MAX_BUF 1024
//lire le fichier
char *readFile( FILE  *fp);
//generer le hash et imprimer dans CHECKSUM.MD5
bool  hash_md5_file(const char  *file);
//strcpy prudent
char *strCopy( char * str );

int main(int argc, char *argv[])
{
  if(!hash_md5_file("../main.c")){
                                          perror("fichier:");
}else{
      puts("Hashage...OK");
      }
  #ifdef WIN32
  getch();
  #endif	
  return 0;
}
char *readFile( FILE *fp )
{
  if( !fp )
  {
    return NULL;
  }

  char *output = NULL;
  char buf[ MAX_BUF ];
  int bytes, byteCount = 0;
  
  memset( buf, 0, sizeof( buf ) );
  
  while( ( bytes = fread( buf, sizeof( char ), sizeof( buf ) - 1, fp ) ) > 0 )
  {
    if( !output )
    {
      /* allocate output */
      output = ( char * )malloc( bytes + 1 );
      memcpy( output, buf, bytes + 1 );
    }
    else
    {
      /* deja existe - reallocate! */
      
      
      char *oldStr = strCopy( output );
      output = ( char * )realloc( output, byteCount + bytes + 1 );
      memcpy( output, oldStr, byteCount );
      
      free( oldStr );
      memcpy( output + byteCount, buf, bytes + 1 );
    }
  
    byteCount += bytes;
    memset( buf, 0, sizeof( buf ) );
  }
  
  return output;
}
bool hash_md5_file(const char *file)
{
     /*                  ****Lire le fichier
                         ***retourner un pointeur qui contient 
                         les donnees
                         ***md5 hash
                         ***imprimer le hex code dans le fichier CHECKSUM.MD5
                         */
     FILE                *fp,*out;
     char                *data;
     char                output[]="CHECKSUM.MD5";
     static  char   HEX_DATA[31];
     md5_state_t     state;
     md5_byte_t      digest[16];
     if(file==NULL){
                    return false;
                    }
     fp=fopen(file,"rb");
     if(fp==NULL){
                  return false;
                  }
     data=readFile(fp); //malloc and memset sont effectuer dans ===>readFile()
     if(data==NULL){
                    return false;
                    }
            //MD5 HASH ALGORITHM
            md5_init(&state);
            md5_append(&state,(const md5_byte_t  *)data,strlen(data));
            md5_finish(&state,digest);
            int i=0;
            for(i;i<16;i++){
                 snprintf(HEX_DATA+i*2,sizeof(HEX_DATA),"%02x",digest[i]); 
                 }
                 fclose(fp);
           
              out=fopen(output,"a+");
              if(out==NULL){
                            return false;
                            }
                            fprintf(out,"MD5 (%s)= ",file);
                            fprintf(out,"%s\n",HEX_DATA);
                            //clean && close
                            fflush(out);
                            fclose(out);  
      
     return true;
}
char *strCopy( char * str )
{
  if( !str )
  {
    return NULL;
  }
  
  char *n = ( char * )malloc( strlen( str ) + 1 );
  memcpy( n, str, strlen( str ) + 1 );
  
  return n;
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   MD5filehash
    •   bin
      • CHECKSUM.MD5Télécharger ce fichier [Réservé aux membres club]51 octets
      • MD5FileHash.ex_Télécharger ce fichier [Réservé aux membres club]23 825 octets
    • obj
    • main.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 325 octets
    • Makefile.winTélécharger ce fichier [Réservé aux membres club]2 125 octets
    • md5.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier12 434 octets
    • md5.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 392 octets
    • MD5FileHash.devTélécharger ce fichier [Réservé aux membres club]1 257 octets
    • MD5FileHash.layoutTélécharger ce fichier [Réservé aux membres club]241 octets

Télécharger le zip


 Historique

19 novembre 2006 22:50:33 :
correction du code

 Sources du même auteur

Source avec Zip Source avec une capture COMPRESSION FICHIERS ALGORITHME HUFFMAN C
Source avec Zip Source avec une capture CLEX ANALYSEUR LEXICALE DU LANGAGE C
ITOA FAIT MASION: COVERSION ENTIER 32 BIT NON SIGNE VERS CHA...
Source avec Zip COMBSORT ALGORITHME DE TRI SIMPLE RAPIDE NON-RECURSIF
Source avec Zip Source avec une capture SHAMAN LIBRAIRIE DE HASH SUPPORTANT SHA1 SHA256 SHA384 SHA51...

 Sources de la même categorie

COMPTER LE NOMBRE DE PAGES D'UN FICHIER PDF par Renfield
Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture GETIONNAIRE D'UNE BIBLIOTHÉQUE EN C par benzarabel
FONCTION D'ÉDITION DE FICHIER BIT À BIT [C-MULTIPLATEFORME] par lynxtyle
Source avec Zip Source avec une capture UN GESTIONNAIRE DU FICHIER par benzarabel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture [C++] HASH FINDER - CALCULATEUR DE HASH par ordiman85
Source avec Zip Source avec une capture SHAMAN LIBRAIRIE DE HASH SUPPORTANT SHA1 SHA256 SHA384 SHA51... par xtremejames183
Source avec Zip Source avec une capture HASH FINDER - CALCULATEUR DE HASH EN C par ordiman85
Source avec Zip Source avec une capture BRUTEFORCING D'UN CHECKSUM MD5 par Clem

Commentaires et avis

Commentaire de deck_bsd le 22/11/2006 19:39:33

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]);
}

Commentaire de xtremejames183 le 22/11/2006 19:56:36

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.

Commentaire de deck_bsd le 22/11/2006 19:57:13

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

Commentaire de nutz007 le 18/10/2007 13:10:30

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 ??

Commentaire de ar1du62 le 18/03/2010 10:30:21 6/10

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

Commentaire de xtremejames183 le 19/09/2010 15:54:55

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.

Commentaire de damien174 le 12/09/2011 14:55:02

Merci ca marche niquel en C sous linux sans retouche :)

merci

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

utilisation du fichier md5.h [ par flatmax ] salut a tousje viens de recuperer les fichiers md5.h, md5.cpp, et j'aimerais savoir comment m'en servir pour obtenir le hash md5 d'un mot.quels foncti hashage MD 5 [ par Horfee ] bon je suis en train de cr&#233;er un pgm qui envoie un fichier par internet. Il me faut pouvoir identifier chaque fichier de facon unique en fonction GetSize mais pour un dossier [ par shadow1779 ] Bonjour, on m'a appris a utiliser GetFileSize pour recevoir la taille d'un fichier, y a til une fonction de l'api ou dans les libc standard afin d'av Type de CheckSum CRC 32, CRC8 , CRC 64 dans un fichier binaire [ par seas ] Bonsoir a tous , Je vais faire trés simple pour permettre aux membres de cérner le probléme sur mon projet . Je dois calculer le Checksum d'un fichier comment faire des hash sous linux? [ par floww154 ] Bonjour a tous, je suis nouveau sur ce forum je m'intéresse a la cryptographie mais je débute en matère de hashages!je désire faire des hashs du genre inversion md5 [ par emmatopiak ] Bonjour J'ai vu qu'un ami a fait un code pour inverser un hash md5, en force brute. Actuellement, c'est en PHP. Je me demandais si ca vaudrait pa hash md5 [ par flatou ] salut a tousje travail sur un projet en c qui doit utiliser le hashage md5. je me suis inspiré donc de cette source (pour faire simple) :http://www.cp créer un launcher [ par Arnaud16022 ] bonjourje fais actuellement un jeu en openGL.les options pour le chargement (fullscreen, resolution,son,...) sont dans un fichier .ini sous forme de t Recuperer l'icon associer a un type de fichier [ par PinkRabbit84 ] Comment fait-on pour recuperer l'icone associer a un type de fichier pour pourvoir ensuite l'afficher dans un TREEVIEW ou un LISTVIEW.Merci d'avancePi aide pour création forcée d'un fichier txt (et écriture)... [ par scelw ] De la même façon que pour "forcer" l'affichage d'un printf() ou d'un cout &lt;&lt; "texte_à_afficher", il faut utiliser un "flush" (cout &lt;&lt; "tex


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales