begin process at 2012 05 27 19:53:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > HASH FINDER - CALCULATEUR DE HASH EN C

HASH FINDER - CALCULATEUR DE HASH EN C


 Information sur la source

Note :
9,6 / 10 - par 5 personnes
9,60 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Classé sous :hash, crc, md5, sha1, tiger Niveau :Initié Date de création :09/08/2006 Date de mise à jour :09/08/2006 17:23:46 Vu / téléchargé :18 269 / 1 189

Auteur : ordiman85

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
C'est mon premier véritable logiciel programmé en C, un calculateur simple de hash de fichiers.


Après de longues recherches, j'ai mis au point ce logiciel qui permet de calculer les hash :
CRC16 CRC32 CRC64 Adler32 ELF32 FNV32 FNV64 Gost-Hash HAVAL-3-4-5 MD2 MD4 (ed2k) MD5 RIPEMD128 RIPEMD160 SHA1 SHA256 SHA384 SHA512 et Tiger


En réalisant des tests et en comparant avec d'autres logiciels de hash, je me suis aperçu que ReHash donnait un CRC64 différent du mien, alors pour ceux qui voudraient calculer avec la méthode ReHash, j'ai ajouté celle-ci (décommentez la ligne #define ___ReHash_Code___ dans "main.h").


C'est la version 1.1.1 prête à compiler avec Dev-C++ et Code::Blocks !

Aperçu : http://ordiman85.free.fr/logiciels/index.php?page= shots

Source

  • /* Hash Finder v1.1.1.0
  • Explications du fonctionnement */
  • // Dans main.c :
  • // Inclusion des variables globales et des librairies à compiler pour les calculs et autres...
  • #include "main.h"
  • // Fonction principale
  • int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
  • // Copie de la ligne de commande (facultative) dans la 'string' LigneCommande qui est utilisable dans tout le code
  • // Ouverture de la fenêtre
  • // Boucle des évènements et des messages
  • }
  • // Callback principal
  • LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  • switch (uMsg) {
  • case WM_CREATE:
  • // Création des contrôles
  • // Gestion de la ligne de commande
  • // Si ligne de comande détectée, lance la fonction OuvertureFichier()
  • return 0;
  • case WM_COMMAND:
  • // Détecte les évènements liés aux contrôles :
  • // Si l'utilisateur appuie sur Parcourir, ça ouvre une mini-fenêtre de sélection
  • // S'il appuie sur Calculer, ça lance la fonction OuvertureFichier()
  • // Si le bouton Calculer était tranformé en bouton Annuler, termien simplement le calcul (lance AnnulerCalcul(1))
  • // S'il appuie enfin sur la case à cocher Afficher en majuscules... lance Change_Majuscules();
  • return 0;
  • case WM_DROPFILES:
  • // Le champ du nom de fichier est modifié en faisant un glisser-déposer
  • return 0;
  • case WM_DESTROY:
  • PostQuitMessage(0); // Si la fenêtre est sur le point d'être détruite
  • return 0;
  • default:
  • return DefWindowProc(hwnd, uMsg, wParam, lParam); // Réponse par déaut
  • }
  • }
  • // Callback lancée par le timer Windows
  • VOID CALLBACK ProgressProc(HWND hwnd, UINT uMsg, UINT_PTR Type, DWORD dwTime) {
  • // Met à jour la barre de progression en arrière-plan
  • }
  • // Tout dans le titre...
  • char OuvertureFichier(char* Fichier) {
  • // Vérifie l'existence du fichier
  • // Si le fichier existe, l'ouvre et lance InitHash
  • // Sinon affiche une box d'erreur
  • }
  • // Initialisation du calcul
  • void InitHash() {
  • // Met les contextes hash à zéro
  • // Modifie le texte des contrôles (Calculer devient Annuler...)
  • // Lance le timer Windows pour éxécuter ProgressProc();
  • // Lance le thread HashProc();
  • }
  • // Fonction de calcul
  • void HashProc() {
  • // Effectue les opérations propres à chaque hash (boucle -> lecture fichier -> MAJ calcul -> et hop ça repart!)
  • // Une fois la lecture finie, lance FinalHash();
  • // A là fin lance AnnulerCalcul(0) pas pour annuler mais pour remettre les contrôles comme à l'initial
  • }
  • // Finalisation du calcul
  • void FinalHash() {
  • // Effectue des manips propres à chaque hash (switch)
  • // Place le hash en hexadécimal dans le variable globale
  • // Lance AnnulerCalcul(0);
  • // Met à jour le champ textuel du hash en lançant Change_Majuscules();
  • }
  • // RAZ des contrôles
  • void Annuler_Calcul(char Annuler) {
  • // Si Annuler == 1, affiche "opération annulée"
  • // Sinon, rien
  • // Et enfin RAZ des contrôles, fin du timer, fermeture du fichier si ouvert.
  • }
  • // MAJ du champ du hash
  • void Change_Majuscules() {
  • // Et en majuscules à l'occasion si l'utilisateur l'a choisi
  • }
/* Hash Finder v1.1.1.0
  Explications du fonctionnement */

// Dans main.c :


// Inclusion des variables globales et des librairies à compiler pour les calculs et autres...
#include "main.h"


// Fonction principale
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
 // Copie de la ligne de commande (facultative) dans la 'string' LigneCommande qui est utilisable dans tout le code
 // Ouverture de la fenêtre
 // Boucle des évènements et des messages
}


// Callback principal
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
 switch (uMsg) {
  case WM_CREATE:
   // Création des contrôles
   // Gestion de la ligne de commande
   // Si ligne de comande détectée, lance la fonction OuvertureFichier()
   return 0;
  case WM_COMMAND:
   // Détecte les évènements liés aux contrôles :
   // Si l'utilisateur appuie sur Parcourir, ça ouvre une mini-fenêtre de sélection
   // S'il appuie sur Calculer, ça lance la fonction OuvertureFichier()
   // Si le bouton Calculer était tranformé en bouton Annuler, termien simplement le calcul (lance AnnulerCalcul(1))
   // S'il appuie enfin sur la case à cocher Afficher en majuscules... lance Change_Majuscules();
   return 0;
  case WM_DROPFILES:
   // Le champ du nom de fichier est modifié en faisant un glisser-déposer
   return 0;
  case WM_DESTROY:
   PostQuitMessage(0); // Si la fenêtre est sur le point d'être détruite
   return 0;
  default:
   return DefWindowProc(hwnd, uMsg, wParam, lParam); // Réponse par déaut
  }
}


// Callback lancée par le timer Windows 
VOID CALLBACK ProgressProc(HWND hwnd, UINT uMsg, UINT_PTR Type, DWORD dwTime) {
 // Met à jour la barre de progression en arrière-plan
}


// Tout dans le titre...
char OuvertureFichier(char* Fichier) {
 // Vérifie l'existence du fichier
 // Si le fichier existe, l'ouvre et lance InitHash
 // Sinon affiche une box d'erreur
}


// Initialisation du calcul
void InitHash() {
 // Met les contextes hash à zéro
 // Modifie le texte des contrôles (Calculer devient Annuler...)
 // Lance le timer Windows pour éxécuter ProgressProc();
 // Lance le thread HashProc();
}


// Fonction de calcul
void HashProc() {
 // Effectue les opérations propres à chaque hash (boucle -> lecture fichier -> MAJ calcul -> et hop ça repart!)
 // Une fois la lecture finie, lance FinalHash();
 // A là fin lance AnnulerCalcul(0) pas pour annuler mais pour remettre les contrôles comme à l'initial
}


// Finalisation du calcul
void FinalHash() {
 // Effectue des manips propres à chaque hash (switch)
 // Place le hash en hexadécimal dans le variable globale
 // Lance AnnulerCalcul(0);
 // Met à jour le champ textuel du hash en lançant Change_Majuscules();
}


// RAZ des contrôles
void Annuler_Calcul(char Annuler) {
 // Si Annuler == 1, affiche "opération annulée"
 // Sinon, rien
 // Et enfin RAZ des contrôles, fin du timer, fermeture du fichier si ouvert.
}


// MAJ du champ du hash
void Change_Majuscules() {
 // Et en majuscules à l'occasion si l'utilisateur l'a choisi
}

 Conclusion

J'ai été étonné que la barre de progression se soit affichée en utilisant CreateWindow() alors que je n'ai mis aucun '#include <commctrl.h>' et aucun InitCommonCtrl ou un truc du genre, alors qu'en faisant une appli toute simple avec une barre de progression dans une petite fenêtre, pas moyen de l'afficher !!


Je voudrais demander aux programmeurs expérimentés si un Sleep() est nécéssaire...


La dernière version sera toujours ici :
http://ordiman85.free.fr/logiciels/index.php?pag e=download

@+

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

09 août 2006 17:23:46 :
maj présentation

 Sources du même auteur

Source avec Zip Source avec une capture COURBES NURBS 3D DANS OPENSCENEGRAPH
Source avec Zip BIBLIOTHEQUE FONCTIONNELLE : OPÉRATIONS, COMPOSITION D'OBJET...
Source avec Zip LIBRAIRIE JSON C++
Source avec Zip Source avec une capture [WIN32] EASY WAVE MIXER
Source avec Zip Source avec une capture [C++] HASH FINDER - CALCULATEUR DE HASH

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip CREEP SECURITY ALGORITHM par nanonavich
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 COMPRESSER ET DECOMPRESSER DES FICHIERS FORMAT ZIP par f_l_a_s_h_b_a_c_k
Source avec Zip CHECKSUM MD5 D'UN FICHIER C par xtremejames183

Commentaires et avis

Commentaire de neria le 09/08/2006 18:48:07

C'est un bel ensemble de fonctions qui va être utile à beaucoup de monde, bravo.

Commentaire de ordiman85 le 09/08/2006 19:05:50

Merci beaucoup !

Je voudrais souligner que des fichiers de test (abc, 1 million de a, [0-9], etc) sont dispo dans le zip de mon site :
http://ordiman85.free.fr/logiciels/telecharger/Hash%20Finder%20v1.1.1%20-%20Source.zip

Si quelqu'un veut vérifier l'exactitude des calculs, il y a des tests à faire indiqués dans les lignes commentées main.h.
J'ai testé "1 million de a" avec tous les hashs avec la version 1.1, normallement ça devrait fonctionner aussi avec la version 1.1.1.
Je vous tiens au courant !

Commentaire de decize le 27/09/2006 10:44:00

Excellente source qui me serra tres utile pour faire des tests sur les differentes fonctions de hash.

Commentaire de belarfa8 le 29/10/2007 12:54:22

C'est du bon travail
Bonne continuation

Commentaire de ironzorg le 02/06/2008 19:46:06 10/10

Très bon code, pas mal du tout:D

Commentaire de jujugratte le 01/01/2009 17:23:49

Excellent travail !
tes sources me seront très utile !
Ce programme est très bien structuré donc je crois que tu n'auras pas de mal à le mettre a jour ^^

Bravo !

Commentaire de ordiman85 le 03/01/2009 14:59:51

Merci pour tout.
Actuellement je développe une version multi-plateforme et C++ de ce programme.

La partie graphique sera gérée par FLTK, une librairie extrêmement légère (environ 300 ko).
La partie calculatoire est encapsulée dans des classes C++ abstraites puis réelles, grâce au polymorphisme.
Le projet est déjà fonctionnel et peut calculer le MD5, CRC16, CRC32, CRC64. Son éxécutable pèse environ 521 ko, ce qui n'est pas excessif pour un logiciel avec peu de fonctionnalités.

Je l'ajouterai sans écraser cette source-ci qui est une version C qui fonctionne totalement différement.

Cordialement, Charly Isidore

Commentaire de artiflo le 10/04/2009 11:54:05

Je suis sous Windows Vista, je l'ai compilé avec Dev C++ 4.9.9.2
Il s'exécute sans probleme, par contre dés que je veux trouver un hash il crash systématiquement. Peut importe le type de fichier et peut importe le type de hash.

Une idée ? :)

Merci.

Commentaire de ordiman85 le 13/04/2009 00:55:24

Effectivement, lorsque je suis passé sous vista, j'ai remarqué que mon logiciel crashait à la fin. Je n'ai pas cherché de solution, à mon avis ça doit venir soit de l'utilisation d'une fonction n'existant plus sous Vista, soit d'une mauvaise gestion des threads.
J'ai commencé un version multi-plateforme en C++ qui elle, n'a pas ce problème.

http://www.cppfrance.com/codes/CPLUSPLUS-HASH-FINDER-CALCULATEUR-HASH_48950.aspx

Commentaire de ar1du62 le 19/03/2010 13:05:09

Comment fais tu pour calculer le CRC32 d'un gros fichier (plus de 300Mo) car j'ai éssayé de reprendre tes sources mais mon niveau est trés loin du tien ^^.
J'ai besoin d'un coup de mains

Ma question plus en détail ici : http://www.cppfrance.com/forum/sujet-LIRE-GROS-FICHIER-CRC32_1416868.aspx#1

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

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 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 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 CRC trame UDP ( Prise de tête ... :( ) [ par Booster ] Bonjour à tous,Alors voilà je fais de la redirection de trame. Le problème est que lorsque je change l'ip de destination du cou le CRC doit aussi chan CRC en caractères alphanumériques [ par genetin ] Bonjour,Je voudrais vérifier qu'une saisie au clavier d'un texte ne contient pas d'erreur, en ajoutant un code de contrôle de 2 caractères. Mais ces d 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 MessageDigest en Java [ par makdand ] bonjour,j'ai écris un code java pour obtenir la valeur hexadécimal de l'application de l'algorithme de hachage MD5. mon problème est qu'on utilisant l Probleme de CRC [ par guirak ] Bonjour a tous, Je travaille actuellement sur un programme de transmission de donnée et je dois utiliser la norme CRC16-CCITT avec les parametres suiv Division Binaire pour CRC [ par raph004 ] Bonjour,Je recherche le code d'un fonction qui renverrais le reste d'une division binaire en C.C'est pour gérer du contrôle CRC.Pourriez-vous me donne fonction de hachage md5 [ par iarachid70 ] bonjour; j'aimerai s'avoir les étapes en détail à suivre dés le téléchargement pour executer le code source de de fonction de hachage cryptographiq


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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,608 sec (3)

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