Hash finder - calculateur de hash en c

Soyez le premier à donner votre avis sur cette source.

Vue 21 580 fois - Téléchargée 1 336 fois

Description

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 / Exemple :


/* 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?page=download

@+

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_neria
Messages postés
320
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
16 février 2009
-
C'est un bel ensemble de fonctions qui va être utile à beaucoup de monde, bravo.
ordiman85
Messages postés
41
Date d'inscription
samedi 4 mars 2006
Statut
Membre
Dernière intervention
19 mars 2010
-
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 !
decize
Messages postés
4
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
2 janvier 2007
-
Excellente source qui me serra tres utile pour faire des tests sur les differentes fonctions de hash.
belarfa8
Messages postés
1
Date d'inscription
lundi 29 octobre 2007
Statut
Membre
Dernière intervention
29 octobre 2007
-
C'est du bon travail
Bonne continuation
ironzorg
Messages postés
45
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
27 juin 2008
-
Très bon code, pas mal du tout:D

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.