Suchen nach einem plattformübergreifenden / tragbaren Programm, das kryptographische Hashwerte einer Datei ausgibt

408
PoorLuzer

Ich bin auf der Suche nach einem Programm, das über Windows und Linux (z. B. ANSI C usw.) quell portierbar sein sollte und das kryptographische Hashes wie MD5, SHA usw. sowie CRC32 einer Datei / Liste von Dateien generiert, die daran übergeben wurden.

Ich werde diese ausführbare Datei auf Terabytes von Dateien ausführen und dabei ihre SHA-, MD5- und CRC32-Signaturen (und künftig mehr) generieren, daher ist Geschwindigkeit wichtig .

Was ich im Sinn hatte, ist genau das, was ReHash ReHash, ReHash ist .

Ich habe leider gesehen, dass viele Benutzer sich darüber beschwert haben, dass Fehler bei der Implementierung der Hashes sowie Fehler bei der Art und Weise der Auffüllung (für blockbasierte Algorithmen) implementiert wurden.

Da ich kein Experte für Kryptographie bin und nur nach einer Black-Box-Lösung suche, die mir einfach die gewünschten Hashes gibt, ohne dass ich mehr Code schreiben müsste, fragte ich mich, ob es nichts Besseres gibt.

Ich könnte natürlich ein Klebeprogramm in Python schreiben, das die Kryptomodule verwendet, um das zu generieren, was ich will, aber ich hätte eine kompilierte Binärdatei aus einer Sprache wie C vorgezogen.

Ich werde diese ausführbare Datei auf Terabytes von Dateien ausführen, ihre SHA-, MD5- und CRC32-Signaturen (und künftig mehr) generieren und all dies mit Python-Code behandeln, sodass etwas, das mit Python kompatibel ist, bevorzugt wird, jedoch nicht auf Kosten von C wie Geschwindigkeit.

1

2 Antworten auf die Frage

2
Gilles

Die Python-Kryptooperationen werden in nativem Code implementiert (von C kompiliert). Da Sie die Werte in einem Python-Programm verwenden möchten, wird die Verwendung dieser Werte einfacher.

Linux kommt mit Dienstprogramme für die Prüfsummen ( cksum, md5sum, sha1sum, ...). So auch die meisten anderen Unices. Es gibt mehrere Windows-Ports der GNU-Dienstprogramme (die Sie unter Linux erhalten): Cygwin, Gnuwin32, Msys, ... Sie benötigen ausreichend aktuelle Dienstprogramme, um SHA-256 und SHA-512 zu erhalten.

Es gibt mehrere ANSI-C-Implementierungen mit sehr liberalen Lizenzen für verschiedene kryptographische Algorithmen, die häufig nicht in einer einzelnen Distribution erfasst werden. Sie können nach ihnen suchen und sie mit kleinen Eingaben testen, um ihre Zuverlässigkeit zu überprüfen.

Stellen Sie unter Windows sicher, dass Sie Dateien wie gewünscht als binär oder als Text behandeln, da die Prüfsummen über Byte-Streams und nicht über Line-Streams definiert werden. (Normalerweise möchten Sie die Dateien im Binärmodus öffnen. Wenn Sie jedoch eine Textdatei haben, die in Windows-Zeilenenden umcodiert wurde, müssen Sie sie als Text öffnen, um den Effekt umzukehren.) Stellen Sie unter jedem Betriebssystem sicher, dass dies der Fall ist Beim Öffnen der Datei führen Sie keine Kodierungsübersetzung durch.

Da Geschwindigkeit für Sie sehr wichtig ist, sammeln Sie alle Implementierungen, die Sie finden können, und vergleichen Sie sie mit einer Eingabe mittlerer Größe (einige Megabytes). Unterschiedliche Implementierungen können bei unterschiedlichen Architekturen eine höhere Geschwindigkeit ermöglichen. 64-Bit-Implementierungen sind wahrscheinlich schneller, wenn Sie sie überhaupt ausführen können.

Obwohl die Krypto-Routinen in C geschrieben sind, schien ich keine Funktion zu bemerken, die einen Dateinamen als Argument verwendete. Das heißt, ich müsste die Datei öffnen und lesen, usw. - alles von Python. Dies bedeutet, dass dies keine C-ähnliche Leistung wäre. Ich würde mich auch mehr für eine bestehende Lösung interessieren, als meine eigene auszurollen! PoorLuzer vor 14 Jahren 0
Aber die Dateiroutinen sind * auch * in C. Ignacio Vazquez-Abrams vor 14 Jahren 0
2
Rich Homolka

OpenSSL verfügt über Werkzeuge, die Hashes berechnen. Das Projekt cygwin ( http://www.cygwin.com/ ) verfügt über OpenSL-Tools. Obwohl es aufgrund der cygwin-Schicht etwas langsamer ist als eine reine Windows-App, erhalten Sie auch eine Umgebung, in der Sie Ihre Hash-Generierung als Skript ausführen können.

Und Python verfügt über eine OpenSSL-Bindung, die es zu einer Alternative zum Standard "hashlib" macht. Die Cygwin-Schicht sollte die Geschwindigkeit der reinen Ganzzahlberechnung nicht beeinflussen, aber die Qualität des Compilers ist wahrscheinlich ((ich bin sicher, es gibt bessere Compiler für win32 / i386 als Cygwins gcc, besonders wenn 64-Bit möglich ist). Gilles vor 14 Jahren 1
Welches wäre also schneller und * richtiger *: OpenSSL oder Hashlib? PoorLuzer vor 14 Jahren 0
Beide wären korrekt, sie implementieren denselben Algorithmus. Schnell müsstest du testen. Ich denke, die einfache Implementierung Ihrer Datenmengen ist wichtiger als die Rohgeschwindigkeit. Rich Homolka vor 14 Jahren 1
hashlib wäre "einfacher", da das Programm eingebaut ist. Lassen Sie mich sehen, ob ich einige dieser Dateiverifizierer dazu bringen kann, korrekt zu arbeiten, und die gewünschten Hashes ausspucken, bevor ich etwas Code eingebe, um dasselbe zu tun. PoorLuzer vor 14 Jahren 0