
Plattformübergreifendes Hash-Toolset zur Berechnung von Nachrichten-Digests (MD5, SHA-1, SHA-256, Tiger, Whirlpool) mit rekursivem Verzeichnisdurchlauf und Dateiintegritätsprüfungsfunktionen.
Dies ist md5deep, eine Sammlung plattformübergreifender Werkzeuge zur Berechnung von Hashwerten (Nachrichtendigesten) für beliebig viele Dateien, wobei optional rekursiv durch die Verzeichnisstruktur navigiert wird. Es kann auch eine Liste bekannter Hashwerte einlesen und die Dateinamen der Eingabedateien anzeigen, deren Hashwerte entweder mit den bekannten Hashwerten übereinstimmen oder nicht. Diese Version unterstützt MD5-, SHA-1-, SHA-256-, Tiger- und Whirlpool-Hashwerte.
Siehe die Datei NEWS für eine Liste der Änderungen zwischen den Versionen.
Siehe die Datei COPYING für Informationen zur Lizenzierung dieses Programms.
Siehe die Datei INSTALL für (allgemeine) Kompilierungs- und Installationsanweisungen. Hier die Kurzversion, die in vielen Fällen funktionieren sollte:
sh bootstrap.sh # führt autoconf, automake aus
./configure
make
make install
Beachten Sie, dass Sie normalerweise root sein müssen, um in das Standardverzeichnis zu installieren. Der Befehl sudo ist dabei hilfreich. Sie können ein alternatives Installationsverzeichnis mit der Option --prefix des configure-Skripts angeben. Um beispielsweise nach /home/foo/bin zu installieren, verwenden Sie:
$ ./configure --prefix=/home/foo
Es gibt vollständige Dokumentation zur Verwendung des Programms auf der Projekt-Startseite: https://github.com/jessek/hashdeep
Die neueste Version ist 4.4. Hier sind die Hashwerte für die Win32-Versionen:
Aus historischen Gründen hat das Programm unterschiedliche Optionen und Funktionen, wenn es unter den Namen "hashdeep" und "md5deep" ausgeführt wird.
hashdeep hat eine Funktion namens "Audit", die eine Liste bekannter Hashwerte verwenden kann, um eine Reihe von DATEIEN zu prüfen. Fehler werden auf die Standardfehlerausgabe gemeldet. Wenn keine DATEIEN angegeben werden, wird von der Standardeingabe gelesen.
-a Audit-Modus. Jede Eingabedatei wird mit der Menge der bekannten Hashwerte verglichen. Ein
Audit gilt als bestanden, wenn jede Eingabedatei genau einer Datei in der Menge der
bekannten Dateien zugeordnet wird. Kollisionen, neue Dateien oder fehlende Dateien
führen dazu, dass das Audit fehlschlägt. Die alleinige Verwendung dieses Flags erzeugt eine Meldung,
entweder "Audit passed" oder "Audit Failed".
-v = gibt die Anzahl der Dateien in jeder Kategorie aus
-v -v = gibt alle Abweichungen aus
-v -v -v = gibt die Ergebnisse für jede untersuchte Datei und jede bekannte Datei aus.
-k <datei> - Die Option -k muss verwendet werden, um die Audit-Datei zu laden
Zur Durchführung eines Audits:
hashdeep -r verzeichnis > /tmp/auditdatei # Audit-Datei erstellen
hashdeep -a -k /tmp/auditdatei -r verzeichnis # Audit testen
Beachten Sie, dass das Audit mit einer standardmäßigen hashdeep-Ausgabedatei durchgeführt wird. (Intern wird das Audit als Teil des Hashvorgangs berechnet.)
Moderne POSIX-basierte Computersysteme betrachten Dateinamen als eine Byte-Sequenz, die von der Anwendung nach Belieben dargestellt wird. Dies bedeutet, dass Dateinamen typischerweise ASCII enthalten, aber auch UTF-8, UTF-16, Latin1 oder sogar ungültige Unicode-Kodierungen enthalten können.
Windows-basierte Systeme haben einen Satz von API-Aufrufen für ASCII-basierte Dateinamen und einen weiteren für Dateinamen, die als UCS-2 kodiert sind, was "ein Format mit fester Länge erzeugt, indem einfach der Codepunkt als 16-Bit-Code-Einheit verwendet wird und für 63.488 Codepunkte im Bereich 0-0xFFFF genau das gleiche Ergebnis wie UTF-16 liefert", laut Wikipedia. Aber Wikipedia bestreitet auf der Diskussionsseite die sachliche Richtigkeit dieser Aussage. Es ist ziemlich klar, dass niemand genau weiß, was Windows tatsächlich tut, und Windows selbst möglicherweise nicht konsistent ist.
Version 3 dieses Programms hat dieses Problem gelöst, indem die Variable TCHAR verwendet wurde, um Dateinamen unter Windows zu speichern, und die Ausgabe verweigert wurde, stattdessen ein "?" ausgegeben wurde. Version 4 dieses Programms wandelt TCHAR-Zeichenfolgen bei der erstbesten Gelegenheit mit der Windows-Funktion WideCharToMultiByte in std::string-Zeichenfolgen um. Es wurden Flags hinzugefügt, um Unicode bei der Ausgabe zu escapen.
Es gibt (anscheinend) keine Möglichkeit unter Windows, eine UTF-8-Dateinamen zu öffnen; er muss mit MultiByteToWideChar zurück in einen Multibyte-Dateinamen konvertiert werden.
Glücklicherweise müssen wir nie wirklich zurückkonvertieren.
Beachten Sie, dass unter Windows die gehashten Dateien Unicode-Zeichen enthalten können, aber die Datei mit den Hashwerten muss einen ASCII-Namen haben.
KOMPILIEREN FÜR WINDOWS:
-D_UNICODE bewirkt, dass TCHAR als 'wchar_t' definiert wird.
KOMPILIEREN FÜR POSIX:
-D_UNICODE ist nicht definiert, sodass TCHAR als 'char' definiert wird.
Zuvor wurden Win32-Funktionen mit #ifdef-Anweisungen gesteuert, wie folgt:
#ifdef _WIN32
_wfullpath(d_name,fn,PATH_MAX);
#else
if (NULL == realpath(fn,d_name))
return TRUE;
#endif
Es gab auch eine Datei namens tchar-local.h, die tatsächlich die Semantik von Funktionen auf verschiedenen Plattformen änderte, mit Dingen wie:
#define _tcsncpy strncpy
#define _tstat_t struct stat
Dies machte den Code sehr schwer wartbar.
Mit der Neufassung 4.0 haben wir diesen Code mit C++-Funktionen geändert, die nach Möglichkeit Objekte zurückgeben, und die Verwendung von #defines vermieden, sodass unter _WIN32-Systemen die Funktion realpath() vor ihrer Verwendung definiert wird und der Hauptcode die Funktion realpath() nicht enthält. Dies sehen Sie in cycles.cpp:
/* Gibt den kanonischen absoluten Pfadnamen in UTF-8 auf Windows- und POSIX-Systemen zurück */
std::string get_realpath(const TCHAR *fn)
{
#ifdef _WIN32
/*
* erweitert einen relativen Pfad zum vollständigen Pfad.
* 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
}
Sie können MinGW installieren und dann einfach mit so etwas konfigurieren:
$ export PATH=$PATH:/usr/local/i386-mingw32-4.3.0/bin $ ./configure --host=i386-mingw32
Der MD5-Algorithmus ist in RFC 1321 definiert: http://www.ietf.org/rfc/rfc1321.txt
Der SHA1-Algorithmus ist in FIPS 180-1 definiert: http://www.itl.nist.gov/fipspubs/fip180-1.htm
Der SHA256-Algorithmus ist in FIPS 180-2 definiert: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
Der Tiger-Algorithmus ist definiert unter: http://www.cs.technion.ac.il/~biham/Reports/Tiger/
Der Whirlpool-Algorithmus ist definiert unter: http://planeta.terra.com.br/informatica/paulobarreto/WhirlpoolPage.html