
Ensemble d'outils de hachage multiplateforme pour le calcul de condensés de messages (MD5, SHA-1, SHA-256, Tiger, Whirlpool) avec parcours récursif de répertoires et capacités d'audit d'intégrité des fichiers.
Ceci est md5deep, un ensemble d'outils multiplateformes pour calculer des empreintes (hashs) ou résumés de messages, pour un nombre quelconque de fichiers, tout en explorant éventuellement récursivement la structure des répertoires. Il peut également prendre une liste d'empreintes connues et afficher les noms de fichiers d'entrée dont les empreintes correspondent ou non à l'une des empreintes connues. Cette version prend en charge les empreintes MD5, SHA-1, SHA-256, Tiger et Whirlpool.
Voir le fichier NEWS pour une liste des changements entre les versions.
Voir le fichier COPYING pour des informations sur les licences de ce programme.
Voir le fichier INSTALL pour des instructions (génériques) de compilation et d'installation. Voici la version courte qui devrait fonctionner dans la plupart des cas :
sh bootstrap.sh # runs autoconf, automake
./configure
make
make install
Notez que vous devez normalement être root pour installer dans l'emplacement par défaut. La commande sudo est utile pour cela. Vous pouvez spécifier un emplacement d'installation alternatif en utilisant l'option --prefix du script configure. Par exemple, pour installer dans /home/foo/bin, utilisez :
$ ./configure --prefix=/home/foo
Une documentation complète sur l'utilisation du programme est disponible sur la page d'accueil du projet, https://github.com/jessek/hashdeep
La dernière version est la 4.4. Voici les empreintes pour les versions Win32 :
Pour des raisons historiques, le programme a des options et fonctionnalités différentes selon qu'il est exécuté sous les noms "hashdeep" et "md5deep".
hashdeep possède une fonctionnalité appelée "audit" qui peut utiliser une liste d'empreintes connues pour auditer un ensemble de FICHIERS. Les erreurs sont envoyées sur la sortie d'erreur standard. Si aucun FICHIER n'est spécifié, il lit depuis l'entrée standard.
-a Mode audit. Chaque fichier d'entrée est comparé à l'ensemble des connus. Un
audit est considéré comme réussi si chaque fichier d'entrée correspond exactement
à un fichier dans l'ensemble des connus. Toute collision, nouveau fichier ou fichier manquant
fera échouer l'audit. L'utilisation de ce seul drapeau produit un message,
soit "Audit passed" soit "Audit Failed".
-v = affiche le nombre de fichiers dans chaque catégorie
-v -v = affiche toutes les divergences
-v -v -v = affiche les résultats pour chaque fichier examiné et chaque fichier connu.
-k <fichier> - L'option -k doit être utilisée pour charger le fichier d'audit
Pour effectuer un audit :
hashdeep -r dir > /tmp/auditfile # Generate the audit file
hashdeep -a -k /tmp/auditfile -r dir # test the audit
Notez que l'audit est effectué avec un fichier de sortie hashdeep standard. (En interne, l'audit est calculé dans le cadre du processus de hachage.)
Les systèmes informatiques modernes basés sur POSIX considèrent les noms de fichiers comme une séquence d'octets qui sont rendus selon la volonté de l'application. Cela signifie que les noms de fichiers contiennent généralement de l'ASCII mais peuvent contenir de l'UTF-8, de l'UTF-16, du latin1, ou même des codages Unicode invalides.
Les systèmes Windows ont un ensemble d'appels API pour les noms de fichiers basés sur l'ASCII et un autre ensemble pour les noms de fichiers encodés en UCS-2, qui « produit un format de longueur fixe en utilisant simplement le point de code comme unité de code 16 bits et produit exactement le même résultat que l'UTF-16 pour 63 488 points de code dans la plage 0-0xFFFF » selon Wikipédia. Mais Wikipédia conteste l'exactitude factuelle de cette déclaration sur la page de discussion. Il est assez clair que personne n'est totalement sûr que Windows le fasse réellement, et Windows lui-même peut ne pas être cohérent.
La version 3 de ce programme a résolu ce problème en utilisant la variable TCHAR pour contenir les noms de fichiers sous Windows et en refusant de les imprimer, imprimant plutôt un "?". La version 4 de ce programme traduit les chaînes TCHAR en chaînes std::string dès que possible en utilisant la fonction Windows WideCharToMultiByte. Des drapeaux ont été ajoutés pour échapper l'Unicode lors de l'impression.
Il n'y a aucun moyen (apparemment) sous Windows d'ouvrir un nom de fichier UTF-8 ; il doit être reconverti en un nom de fichier multi-octets avec MultiByteToWideChar.
Heureusement, nous n'avons jamais vraiment besoin de reconvertir.
Notez que sous Windows, les fichiers hachés peuvent contenir des caractères Unicode, mais le fichier contenant les empreintes doit avoir un nom ASCII.
COMPILATION POUR WINDOWS :
-D_UNICODE définit TCHAR comme 'wchar_t'.
COMPILATION POUR POSIX :
-D_UNICODE n'est pas défini, ce qui fait que TCHAR est défini comme 'char'.
Auparavant, les fonctions win32 étaient contrôlées avec des déclarations #ifdef, comme ceci :
#ifdef _WIN32
_wfullpath(d_name,fn,PATH_MAX);
#else
if (NULL == realpath(fn,d_name))
return TRUE;
#endif
Il y avait aussi un fichier appelé tchar-local.h qui changeait en fait la sémantique des fonctions sur différentes plateformes, avec des choses comme ceci :
#define _tcsncpy strncpy
#define _tstat_t struct stat
Cela rendait le code très difficile à maintenir.
Avec la réécriture 4.0, nous avons changé ce code avec des fonctions C++ qui retournent des objets lorsque c'était possible et évitent l'utilisation de #defines de sorte que sur les systèmes _WIN32, la fonction realpath() soit définie avant son utilisation, et que le code principal n'ait pas la fonction realpath(). Vous pouvez voir cela dans cycles.cpp :
/* Return the canonicalized absolute pathname in UTF-8 on Windows and POSIX systems */
std::string get_realpath(const TCHAR *fn)
{
#ifdef _WIN32
/*
* expand a relative path to the full path.
* http://msdn.microsoft.com/en-us/library/506720ff(v=vs.80).aspx
*/
TCHAR absPath[PATH_MAX];
if(_fullpath(absPath,fn,PAT_HMAX)==0) return "";
return tchar_to_utf8(absPath);
#else
char resolved_name[PATH_MAX]; //
if(realpath(fn,resolved_name)==0) return "";
return string(resolved_name);
#endif
}
Vous pouvez installer mingw puis simplement configurer avec quelque chose comme ceci :
$ export PATH=$PATH:/usr/local/i386-mingw32-4.3.0/bin $ ./configure --host=i386-mingw32
L'algorithme MD5 est défini dans la RFC 1321 : http://www.ietf.org/rfc/rfc1321.txt
L'algorithme SHA1 est défini dans FIPS 180-1 : http://www.itl.nist.gov/fipspubs/fip180-1.htm
L'algorithme SHA256 est défini dans FIPS 180-2 : http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
L'algorithme Tiger est défini sur : http://www.cs.technion.ac.il/~biham/Reports/Tiger/
L'algorithme Whirlpool est défini sur : http://planeta.terra.com.br/informatica/paulobarreto/WhirlpoolPage.html