Bedeutet ein identischer kryptografischer Hash oder eine Prüfsumme für zwei Dateien, dass sie identisch sind?

16232
sam

Ich habe 2 Excel-Dokumente und möchte überprüfen, ob sie mit Ausnahme des Dateinamens identisch sind.

Zum Beispiel werden die Dateien fileone.xlsund aufgerufen filetwo.xls. Abgesehen von den Dateinamen wird angenommen, dass deren Inhalt identisch ist. Dies ist jedoch, was ich überprüfen möchte.

Ich habe nach Möglichkeiten gesucht, dies zu überprüfen und ohne ein paar Plugins zu installieren. Es scheint kein direkter Weg zu sein.

Ich habe versucht, MD5-Hashes für beide Dateien zu generieren. Wenn die Hashes identisch sind, bedeutet dies, dass der Inhalt der Datei 1: 1 ist.

57
Cryptohashes und manchmal sogar normale Hashes können nützlich sein, um Dateien auf verschiedenen Systemen zu vergleichen oder nach einer großen Anzahl von Dateien zu suchen. Wenn sich jedoch zwei Dateien auf demselben System befinden, können Sie sie einfach mit `cmp` unter Unix oder` fc` ( Dateivergleich) unter Windows. dave_thompson_085 vor 6 Jahren 8
https://shattered.io/ - SHA1 ist ein "stärkerer" Hash-Algorithmus als md5 und weiterhin https://shattered.io/static/shattered-1.pdf und https://shattered.io/static/shattered-2 .pdf haben den gleichen Hashwert, sind jedoch völlig verschieden. styrofoam fly vor 6 Jahren 10
Randbemerkung: Überprüfen Sie zuerst ihre Größe. Wenn sie unterschiedliche Größen haben, müssen Sie die Dateien nicht öffnen, sie unterscheiden sich. Emilio M Bumachar vor 6 Jahren 29
Vereinfachte Version: Ein MD5-Hash ist gut genug, um sich vor einem * Unfall * zu schützen. Ob das für Sie gut genug ist, müssen Sie anhand Ihrer Umstände entscheiden. Euro Micelli vor 6 Jahren 42
`diff -s file1 file2` Wenn sie sagt, dass sie identisch sind, sind sie identisch (es vergleicht die Dateien Byte für Byte, sodass auch Hash-Kollisionen ausgeschlossen werden). Prüfsummen werden verwendet, wenn Sie nur einen Hash und ein Element haben, von dem angenommen wird, dass es mit dem Absender dieses Hashes identisch ist. Bakuriu vor 6 Jahren 8
@EmilioMBumachar hängt von der Definition von "anders" ab. Der Inhalt der Bytes kann unterschiedlich sein, jedoch nicht der semantische Inhalt. Beispiel, wenn Sie nach einem abschließenden Text nur Leerzeichen hinzufügen. Oder in einem strukturierten Format, wenn Sie einen Abstand haben, der beliebig lang sein kann, ohne dass Inhalte angezeigt werden. Patrick Mevzek vor 6 Jahren 0
Pigeonhole-Prinzip stendarr vor 6 Jahren 4
Der Vergleich zweier Dateien erfordert weniger Rechenaufwand als das Hashing. Wo Hashes nützlich sind, ist, wenn Sie über eine große Anzahl von Dateien verfügen und prüfen möchten, ob ein Paar identisch ist. Acccumulation vor 6 Jahren 6
TL; DR: Wahrscheinlich. Nonny Moose vor 6 Jahren 2
@ Bakuriu Oder `cmp -s`, was wahrscheinlich effizienter ist. Konrad Rudolph vor 6 Jahren 0
Was meinst du damit, dass ihr Inhalt identisch ist? Wenn ich zwei Dateien mit identischen Zellenwerten habe, die Schriftarten jedoch unterschiedlich sind, sind sie dann identisch? Wenn ich zwei Dateien habe, bei denen jeder Zellenwert und jedes Styling gleich sind, die Dateien aber in unterschiedlicher Reihenfolge gespeichert werden, sind sie dann gleich? David Rice vor 6 Jahren 2
Vergessen Sie nicht, dass einige Betriebssysteme möglicherweise mehr als einen Datenstrom in einer Datei speichern. NTFS hat alternative Streams, * nix verfügt über erweiterte Benutzerattribute, das alte MacOS hatte den Ressourcenzweig. Wenn Sie also Angst haben, dass jemand versteckte Informationen zu einer Datei hinzufügt, reicht es nicht aus, den Hauptdatenstrom zu markieren. b0fh vor 6 Jahren 2
Beim Vergleich von zwei Dateien über ein Netzwerk ist bei @Akkumulation jedoch viel weniger Bandbreite mit einem Hash erforderlich. Eric Duminil vor 6 Jahren 0

17 Antworten auf die Frage

93
LawrenceC

Wenn die Hashes identisch sind, bedeutet dies, dass der Inhalt der Datei 1: 1 ist.

Alle Dateien sind eine Sammlung von Bytes (Werte 0-255). Wenn zwei MD5-Hash-Dateien übereinstimmen, sind beide Bytesammlungen höchstwahrscheinlich genau gleich (gleiche Reihenfolge, gleiche Werte).

Es besteht eine sehr geringe Chance, dass zwei Dateien dasselbe MD5 erzeugen können, was ein 128-Bit-Hash ist. Die Wahrscheinlichkeit ist:

Wahrscheinlichkeit von nur zwei Hashes versehentlich kollidiert ist 1/2 128 der 1 ist in 340 Undecillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 Trillionen 374 Billi 607 Billionen 431 Milliarden 768 Millionen 211 Tausend 456. (von einer Antwort auf Stackoverflow .)

Hashes sollen nur in eine Richtung funktionieren - dh Sie nehmen eine Sammlung von Bytes und erhalten einen Hash, aber Sie können keinen Hash nehmen und eine Sammlung von Bytes zurückbekommen.

Kryptographie hängt davon ab (es ist eine Möglichkeit, zwei Dinge zu vergleichen, ohne zu wissen, was diese Dinge sind.)

Um das Jahr 2005 herum wurde entdeckt, dass Methoden einen MD5-Hash übernehmen und Daten erstellen, die diesem Hash entsprechen, und zwei Dokumente erstellen, die denselben MD5-Hash ( Kollisionsangriff ) hatten. Siehe den Kommentar von @ user2357112 unten. Dies bedeutet, dass ein Angreifer beispielsweise zwei ausführbare Dateien erstellen kann, die dasselbe MD5 haben, und wenn Sie von MD5 abhängig sind, um zu entscheiden, welchen vertrauenswürdigen Dateien Sie vertrauen, werden Sie getäuscht.

Daher sollte MD5 nicht für Kryptographie oder Sicherheit verwendet werden. Es ist schlecht, ein MD5 auf einer Download-Site zu veröffentlichen, um beispielsweise die Download-Integrität zu gewährleisten. Abhängig von einem MD5-Hash, den Sie nicht selbst erstellt haben, um zu überprüfen, ob Datei- oder Dateninhalte zu vermeiden sind.

Wenn Sie Ihre eigenen generieren, wissen Sie, dass Sie sich (hoffentlich) nicht böse sind. Für Ihre Verwendung ist dies in Ordnung, aber wenn Sie möchten, dass jemand anderes es reproduzieren kann und Sie den MD5-Hash öffentlich veröffentlichen möchten, sollte ein besserer Hash verwendet werden.


Beachten Sie, dass zwei Excel-Dateien möglicherweise dieselben Werte in denselben Zeilen und Spalten enthalten, der Bytestream der Datei jedoch aufgrund unterschiedlicher Formatierungen, Stile, Einstellungen usw. völlig unterschiedlich ist.

Wenn Sie die Daten in der Datei vergleichen möchten, exportieren Sie sie zuerst mit den gleichen Zeilen und Spalten in CSV, um die gesamte Formatierung zu entfernen, und vergleichen Sie dann die CSV-Werte.

Excel-Dateien und andere Bürodokumente können auch unterschiedliche Hashwerte enthalten, da sie geöffnet und erneut gespeichert wurden, ohne dass Änderungen vorgenommen wurden, da die Metadaten in der Datei einen neuen Wert für die zuletzt gespeicherte Datumszeit enthalten. BeowulfNode42 vor 6 Jahren 105
Bonus: Wenn Sie nach CSV exportiert haben, können Sie das ehrwürdige `diff` oder ein ähnliches Dienstprogramm verwenden, um zu bestätigen, dass die Dateien Byte für Byte identisch sind, anstatt nur den gleichen Hashwert zu verwenden. Monty Harder vor 6 Jahren 29
Das Nehmen eines Hashes und das Erstellen von Daten, die dem Hash entsprechen, ist ein Angriff auf Vorbilder. Ich glaube, dass MD5 derzeit anfällig für Kollisionsangriffe ist, aber ich glaube nicht, dass Preimage- oder Second-Preimage-Angriffe derzeit machbar sind. user2357112 vor 6 Jahren 18
@ Tim, was sagst du? Er sagte: Exportiere sie nach CSV und überprüfe mit "diff -s", ob die CSV identisch sind. Tatsächlich können Sie sogar die Excel-Dateien "diff -s": Wenn "diff" sagt, dass sie identisch sind, müssen Sie nicht zum CSV-Vergleich gehen. Bakuriu vor 6 Jahren 2
@Bakuriu Mein Kommentar war eindeutig sehr schlecht formuliert - ich meinte, beim Export in CSV würden viele Informationen verloren gehen - insbesondere Formeln, Diagramme, bedingte und Standardformatierungen. Tim vor 6 Jahren 2
Wie schreibt man über die Unsicherheit von MD5, ohne einen besseren Hash wie SHA256 vorzuschlagen ... Mehrdad vor 6 Jahren 2
Ehrlich gesagt geht es bei der Frage um Vergleich und nicht um Sicherheit. LawrenceC vor 6 Jahren 1
Man kann noch mehr betonen, dass es logisch ist, dass mehrere Datenblöcke denselben Hash gemeinsam nutzen. Dies ist unabhängig vom Hash-Algorithmus und der Schwierigkeit, Kollisionen zu erzeugen: Es gibt einfach viel mehr Variationen von Daten (nämlich eine unendliche Menge) als von Hashwerten einer gegebenen Größe (z. B. 2 ^ 128 für einen 128-Bit-Hash). Die Beziehungsdaten -> Hash ist eine wahre Funktion (wem wahrscheinlich, aber nicht unbedingt surjektiv). Die Beziehung hash -> data ist keine Funktion. Peter A. Schneider vor 6 Jahren 0
@MontyHarder Kein CSV-Export erforderlich, Sie können die Excel-Dateien direkt "differenzieren". Ich würde ausdrücklich empfehlen, genau das zu tun (oder eher "cmp" zu verwenden, was viel effizienter ist, falls die Dateien nicht übereinstimmen). Konrad Rudolph vor 6 Jahren 0
@KonradRudolph, aber die beiden Dateien könnten in jeder Hinsicht identisch sein und dennoch einige Metadatenunterschiede aufweisen, die dazu führen, dass "diff" berichtet, dass es sich um unterschiedliche Binärdateien handelt. Beim Export nach CSV ging es vor allem darum, diese Möglichkeit zu beseitigen. Monty Harder vor 6 Jahren 1
@LawrenceC, Ist die Wahrscheinlichkeit, dass zwei Hashes kollidieren, konstant? Ich denke, es wird von der Datengröße abhängen, je größer die Daten, desto größer die Wahrscheinlichkeit. ist es nicht JITHIN JOSE vor 6 Jahren 0
@MontyHarder, aber Sie können `diff` bekommen, um zu sagen, * wo * sich die Excel-Dateien unterscheiden. Wenn es sich nur um einen Metadaten-Müll am Anfang oder Ende der Datei handelt, können Sie sicher davon ausgehen, dass der Inhalt der Tabellenkalkulation und die Formeln ansonsten einigermaßen identisch sind. Doktor J vor 6 Jahren 0
Wenn es Ihnen hilft, sind Excel (und andere Office-Dateien, deren Dateinamenserweiterungen alle aus ". ??? x" bestehen, nur XML-Bäume, die als ZIP-Format gespeichert sind). Sie können "myletter.docx" oder "mycharts.xlsx" in "mywhatever.zip" umbenennen und dann die Datei erweitern, um zu sehen, wie das Format angeordnet ist. Wenn Sie also vorhaben, zwei solcher Dateien zu "differieren", sollten Sie einen für ZIP-Daten geeigneten Zähler für das Überspringen von vorangegangenen Versätzen verwenden, zusammen mit allen anderen Vorbehalten, die sich auf ZIP-Dateien beziehen. Ti Strga vor 6 Jahren 1
In industriellen Anwendungen, bei denen wir ziemlich sicher sein müssen, dass Daten- oder Anwendungsdateien den erwarteten Werten entsprechen, vergleichen wir den Hash und die Dateigröße mit den erwarteten Werten. Ich weiß nicht, ob der Vergleich der Dateigrößen eine zusätzliche Sicherheitsebene bedeutet, aber es ist üblich. Jason vor 6 Jahren 1
@TiStrga: Richtig. Denken Sie daran, dass XML-Dateien sich in Whitespaces, Attributreihenfolge, Namespace-Präfixen, Codierung usw. unterscheiden können, aber immer noch gleich sind. Thomas Weller vor 6 Jahren 1
Wenn Sie einen Zellbereich überprüfen möchten, können Sie einen Baum-Hash sammeln, müssen aber unbedingt scharf sein. mckenzm vor 6 Jahren 0
37
a CVn

Ja, ein identischer kryptografischer Hash bedeutet in der Praxis, dass die Dateien gleich sind, solange die Dateien nicht von einem Angreifer oder einer anderen böswilligen Entität erstellt wurden. Die Wahrscheinlichkeit zufälliger Kollisionen mit einer gut entworfenen kryptographischen Hash-Funktion ist so gering, dass sie in der Praxis und ohne aktiven Angreifer vernachlässigbar ist.

Im Allgemeinen können wir jedoch nicht sagen, dass zwei beliebige Dateien mit demselben Hash eindeutig bedeuten, dass sie identisch sind.

Eine kryptographische Hash-Funktion funktioniert so, dass sie eine Eingabe beliebiger Länge übernimmt und einen aus der Eingabe berechneten Wert fester Länge ausgibt. Einige Hash-Funktionen haben mehrere Ausgabelängen, aus denen Sie auswählen können, die Ausgabe ist jedoch noch zu einem gewissen Grad ein Wert mit fester Länge. Dieser Wert wird einige Dutzend Bytes lang sein; Die Hash-Algorithmen mit dem längsten heute gebräuchlichen Ausgabewert haben eine 512-Bit-Ausgabe und eine 512-Bit-Ausgabe umfasst 64 Byte.

Wenn eine Eingabe in eine Hash-Funktion länger ist als die Ausgabe der Hash-Funktion, muss etwas Treue entfernt werden, damit die Eingabe in die Ausgabe passt. Folglich müssen mehrere Eingänge mit Längen vorhanden sein, die größer als die Länge des Ausgangs sind und die gleiche Ausgabe erzeugen.

Nehmen wir als Beispiel das aktuelle Arbeitstier SHA-256. Es gibt einen Hash von 256 Bits oder 32 Bytes aus. Wenn Sie zwei Dateien haben, die jeweils genau 32 Byte lang sind, aber unterschiedlich sind, sollten diese (sofern kein Fehler im Algorithmus angenommen wird) unterschiedliche Werte verwenden, unabhängig vom Inhalt der Dateien. mathematisch gesehen ist der Hash eine Funktion, die einen 2 256- Eingangsraum auf einen 2 256- Ausgangsraum abbildet, der ohne Kollisionen auskommen sollte. Wenn Sie jedoch über zwei Dateien verfügen, die jeweils 33 Byte lang sind, muss eine Kombination von Eingaben vorhanden sein, die den gleichen 32-Byte-Ausgabehashwert für beide Dateien angeben, da wir nun einen 2 264- Eingabebereich auf einen 2 256- Speicher zuordnenAusgabebereich; Hier kann man leicht erkennen, dass es durchschnittlich 2 8 Eingänge für jeden einzelnen Ausgang geben sollte. Nehmen Sie dies weiter und bei 64-Byte-Dateien sollten 2 256 Eingänge für jeden einzelnen Ausgang vorhanden sein!

Kryptografische Hashfunktionen sind so konzipiert, dass es rechnerisch schwierig ist, eine Eingabe zusammenzustellen, die eine bestimmte Ausgabe ergibt, oder zwei Eingänge zu bilden, die dieselbe Ausgabe ergeben. Dies ist bekannt als Urbild Angriff Widerstand oder Kollision Angriff Widerstand . Es ist nicht unmöglich, diese Kollisionen zu finden. es soll nur wirklich sehr hart sein. (Ein Sonderfall eines Kollisionsangriffs ist ein Geburtstagsangriff .)

Einige Algorithmen sind besser als andere, um Angreifern zu widerstehen. MD5 wird heutzutage im Allgemeinen als völlig kaputt betrachtet, aber als letztes Mal sah ich aus, dass es noch einen guten Widerstand gegen die ersten Bilder hatte . SHA-1 ist ebenfalls effektiv gebrochen; Ursprüngliche Angriffe wurden gezeigt, erfordern jedoch besondere Bedingungen, obwohl es keinen Grund zu der Annahme gibt, dass dies auf unbestimmte Zeit der Fall sein wird. Das Sprichwort besagt, Angriffe werden immer besser, sie werden nie schlechter. SHA-256/384/512 werden derzeit für die meisten Zwecke noch als sicher angesehen. Aber wenn Sie, sind nur daran interessiert, wenn zwei Nicht- in böser Absicht erstellten, gültigDateien sind gleich, dann sollte jede dieser Dateien ausreichen, da der Eingabebereich bereits ausreichend eingeschränkt ist, so dass Sie an zufälligen Kollisionen interessiert sind. Wenn Sie Grund zu der Annahme haben, dass die Dateien in böswilliger Absicht erstellt wurden, müssen Sie zumindest eine kryptografische Hash-Funktion verwenden, die derzeit als sicher angesehen wird, wodurch der untere Balken auf SHA-256 gesetzt wird.

Das erste Vorbild besteht darin, eine Eingabe zu finden, die einen bestimmten Ausgabehashwert ergibt. Ein zweites Vorbild besteht darin, eine Eingabe zu finden, die dieselbe Ausgabe wie eine andere, angegebene Eingabe ergibt. Eine Kollision besteht darin, zwei Eingaben zu finden, die dieselbe Ausgabe liefern, unabhängig davon, was das ist, und manchmal auch ohne Berücksichtigung der Eingaben.

Alles in allem ist es wichtig zu wissen, dass die Dateien sehr unterschiedliche Datendarstellungen haben können und trotzdem genau gleich angezeigt werden. So können sie zu sein scheinen das gleiche, obwohl ihre Verschlüsselungs Hashes nicht übereinstimmen, aber wenn die Hashes übereinstimmen, dann sind sie sehr wahrscheinlich die gleiche erscheinen.

Wenn die Hashwerte übereinstimmen, sind die Dateien entweder das Ergebnis einer absichtlichen Kollision oder sie sind nicht und dann sind sie _garantiert, damit sie gleich sind. Die Wahrscheinlichkeit eines zufälligen Zusammenstoßes ist rein theoretisch. Zu sagen, dass „wenn die Hashwerte übereinstimmen, dann ist es sehr wahrscheinlich, dass sie gleich aussehen“, ist irreführend: Wenn es böswillige Schritte gibt und es eine Kollisionssituation gibt, sind sie wahrscheinlich nicht gleich, und andernfalls ist die Wahrscheinlichkeit gleich Null Es gibt kein Ereignis mit niedriger Wahrscheinlichkeit, gegen das vorgebeugt werden muss. Gilles vor 6 Jahren 2
@Gilles: Im Gegenteil. Michaels Wortlaut ist genau richtig, und "garantiert" ist irreführend (oder sachlich falsch). Die Wahrscheinlichkeit, dass zwei Dateien mit identischen Hashes übereinstimmen (ungeachtet böswilliger Änderungen), ist äußerst gering und kann in der Praxis vernachlässigt werden. Es ist jedoch nicht Null. Es besteht im Allgemeinen die Möglichkeit, dass aus verschiedenen Gründen _will_ unterschiedliche Eingaben denselben Hash erzeugen, und möglicherweise sogar mit einer Wahrscheinlichkeit, die viel höher als 2 ^ -128 ist (kryptographische Algorithmen sind schwarze Kunst), und der Algorithmus kann auf eine subtile, unbekannte Weise fehlerhaft sein Wir haben keine Möglichkeit, 100% sicher zu sein). Damon vor 6 Jahren 9
Ich habe die Antwort leicht angepasst, um zu versuchen, die obigen Kommentare anzusprechen. a CVn vor 6 Jahren 0
@Gilles "_effective zero_" ist immer noch ** _ nicht null _ **, was bedeutet, dass immer noch eine (allerdings geringe) Wahrscheinlichkeit besteht, dass zwei verschiedene Datensätze denselben Hash ergeben. Sie können dagegen nicht argumentieren. Attie vor 6 Jahren 5
"Das können wir nicht sagen" - Wir können es mit mehr Sicherheit sagen als so ziemlich jeder weltliche Glaube, dass jeder von uns die Welt für wahr hält. Zu behaupten, es sei wahr, ist eine völlig legitime Verwendung dieses Wortes; oder sonst ist nichts. smls vor 6 Jahren 1
@Attie: Die Wahrscheinlichkeit, dass zwei nicht zusammenhängende Dateien auf denselben Wert hashen, ist so weit unter der Wahrscheinlichkeit vieler anderer Dinge, die schief gehen können (z. B. zufällige Bitfehler, die Dateien auf der Festplatte beschädigen), dass es sich nicht lohnt, vor zufälligen Übereinstimmungen zu schützen. Die Abwehr von vorsätzlich konstruierten Spielen kann sich lohnen, zufällige Spiele sind jedoch so unwahrscheinlich, dass die damit verbundenen Anstrengungen möglicherweise an anderer Stelle besser eingesetzt werden könnten. supercat vor 6 Jahren 5
@Damon Die Wahrscheinlichkeit einer versehentlichen MD5-Kollision ist zu gering. Es wäre sinnlos, dies zu berücksichtigen, ohne wahrscheinliche Ereignisse zu berücksichtigen, beispielsweise die Wahrscheinlichkeit, dass ein RAM-Fehler dazu führt, dass der Computer das falsche Ergebnis meldet. Eine zufällige Kollision wird garantiert nicht passieren, weil sie nicht passieren wird. Wenn es falsch wäre, dass identische Hashes garantieren, dass es keine zufälligen Kollisionen gibt, dann existiert ein Gegenbeispiel. Gilles vor 6 Jahren 0
@Gilles falsch. Sie können mir nicht in einem Atemzug sagen, dass es eine Chance gibt, egal wie klein ** Sie ** es bewerten, dass eine zufällige Kollision auftreten kann. Dann kann schon beim nächsten Stipendiat keine Kollision auftreten. Die Aussage, dass dies sehr irreführend ist, impliziert eine Eigenschaft des Hash-Algorithmus, von der bereits bekannt ist, dass sie vollständig falsch ist. iheanyi vor 6 Jahren 3
@ Gilles: Ich bin mir bewusst, dass diese Wahrscheinlichkeit so gering ist, dass sie ignoriert werden kann. _ "Spielt keine Rolle" _ und _ "existiert nicht" _ sind nicht die gleichen Dinge. Es ist möglich, dass eine Kollision auftritt, und tatsächlich werden Kollisionen garantiert garantiert (mit extrem geringer Wahrscheinlichkeit). Die Feststellung, dass etwas garantiert ist, um nicht zu passieren, bedeutet nichts weniger als es unmöglich ist (mit absoluter Sicherheit). Das bedeutet wirklich "garantiert", aber es ist nachweislich nicht der Fall. Damon vor 6 Jahren 1
Als nicht ganz richtige Analogie (da sich zwischen den beiden Fällen etwa 10 Größenordnungen befinden), können Sie feststellen, dass Sie _garantiert sind, die Lotterie nicht zu gewinnen. Wenn das garantiert ist, warum spielen die Leute dann Lotto? Weißt du, jede zweite Woche oder so macht _some Dummkopf win_. Denken Sie darüber nach, wer ist der größere Dummkopf, der Dummkopf, der reich wurde, indem er gewann, was nicht gewonnen werden konnte, oder der Dummkopf, der schlau genug war, nicht zu spielen? Die Chancen mögen lächerlich sein, unwahrscheinlich unwahrscheinlich - aber solange es einen Weg gibt, ist _guaranteed_ das falsche Wort. Damon vor 6 Jahren 0
@Damon Wenn diese Analogie fehlschlägt, gibt es viele Größenordnungen zwischen den beiden Fällen. Die Lotterie zu gewinnen ist sehr unwahrscheinlich, aber es ist noch wahrscheinlicher, als von einem Meteoriten getroffen zu werden. Und das ist noch viel wahrscheinlicher als das Auffinden einer MD5-Kollision (bei IIRC gibt es einen Menschen, der von einem Meteoriten getroffen wurde, daher kann es nicht so unwahrscheinlich sein). Gilles vor 6 Jahren 0
Das Auffinden von zwei Eingaben, die den gleichen Hash ergeben, ist ein Kollisionsangriff, kein zweiter Vorbildangriff. Bei einem zweiten Angriff auf ein Vorimage wird eine Eingabe vorgenommen und eine zweite Eingabe gefunden, die denselben Hashwert angibt. Ein Kollisionsangriff ist viel einfacher, da Sie kein bestimmtes Ziel erreichen müssen. user2357112 vor 6 Jahren 0
Wenn die Dateilängen gleich sind und die Dateien für * mehr als einen Hash * die gleichen Hashcodes haben (natürlich mit unterschiedlichen Hash-Algorithmen), sind die Chancen noch größer, dass die Dateien identisch sind. David R Tribble vor 6 Jahren 0
@Damon: Alle zwei oder drei Wochen gewinnt jemand die Lotterie, aber es ist nicht so, dass jede oder zwei Wochen zufällig eine MD5-Kollision erzeugt wird. Es hängt nur davon ab, ob Michael über die abstrakte mathematische Hash-Funktion spricht (in diesem Fall können wir über die Wahrscheinlichkeit sprechen) oder über tatsächliche tatsächliche Hash-Vergleiche auf realen Computern (in diesem Fall ist es nicht sinnvoll, auf einer Wahrscheinlichkeit von zu bestehen eine zufällige Hash-Kollision, aber * nicht * besteht auf der Wahrscheinlichkeit einer falschen Übereinstimmung aufgrund eines weitaus wahrscheinlicheren Hardwarefehlers bei der Berechnung der Hashes). Steve Jessop vor 6 Jahren 0
Trotzdem stimme ich zu, dass "vernachlässigbar" eine bessere Art ist, das als das zu formulieren, was Gilles vorschlägt. Wenn jemand zu dumm ist, um zu wissen, was die Worte vernachlässigbar und / oder die Wahrscheinlichkeit bedeuten, oder darüber nachdenkt, was * in der Praxis * tatsächlich zu tun ist, dann sagen Sie ihm, dass, wenn die Hashwerte übereinstimmen, die beiden zu betrachtenden Fälle die Dateien sind sind gleich oder es ist eine absichtlich erzeugte Kollision. Es gibt keine sinnvolle Hinzufügung "oder eine zufällige MD5-Kollision; oder ein kosmischer Strahl hat Ihren RAM getroffen; oder es gab einen zuvor unentdeckten Fehler in sshlib", auch wenn sie technisch gesehen allesamt Kandidaten sind. Steve Jessop vor 6 Jahren 0
@ user2357112 Behoben. a CVn vor 6 Jahren 0
10
Attie

Es ist ein Wahrscheinlichkeitsspiel ... Hashes können eine endliche Anzahl von Werten darstellen.

Betrachten wir einen hypothetischen (und sehr schwachen) 8-Bit-Hash-Algorithmus, so kann dies 256 verschiedene Werte darstellen. Wenn Sie beginnen, Dateien durch den Algorithmus auszuführen, werden Sie Hashes herausholen ... aber in Kürze werden Sie " Hash-Kollisionen " sehen. Dies bedeutet, dass zwei verschiedene Dateien in den Algorithmus eingegeben wurden und derselbe Hash-Wert als Ausgabe ausgegeben wurde. Der Hash ist hier eindeutig nicht stark genug und wir können nicht behaupten, dass " Dateien mit übereinstimmenden Hashs den gleichen Inhalt haben ".

Durch die Erweiterung der Hash-Größe und die Verwendung von stärkeren kryptografischen Hash-Algorithmen können Kollisionen erheblich verringert werden. Außerdem können wir uns darauf verlassen, dass zwei Dateien mit demselben Hash den gleichen Inhalt haben.

Trotzdem können wir niemals 100% ige Sicherheit erreichen - wir können niemals mit Sicherheit behaupten , dass zwei Dateien mit demselben Hash wirklich den gleichen Inhalt haben.

In den meisten / vielen Situationen ist dies in Ordnung und der Vergleich von Hashes ist " gut genug ". Dies hängt jedoch von Ihrem Bedrohungsmodell ab.

Wenn Sie letztendlich das Sicherheitsniveau erhöhen müssen, würde ich Ihnen Folgendes empfehlen:

  1. Verwenden Sie starke Hash-Algorithmen ( MD5 wird nicht mehr als ausreichend angesehen, wenn Sie sich vor potenziell böswilligen Benutzern schützen müssen.)
  2. Verwenden Sie mehrere Hash-Algorithmen
  3. Vergleichen Sie die Größe der Dateien - ein zusätzlicher Datenpunkt kann dabei helfen, mögliche Kollisionen zu erkennen. Beachten Sie jedoch, dass die demonstrierte MD5-Kollision die Länge der Daten nicht ändern musste.

Wenn Sie zu 100% sicher sein müssen, beginnen Sie auf jeden Fall mit einem Hash, aber wenn die Hashwerte übereinstimmen, können Sie die beiden Dateien Byte für Byte miteinander vergleichen.


Darüber hinaus, wie von anderen aufgezeigt ... Die Komplexität von Dokumenten, die von Anwendungen wie Word und Excel erstellt werden, bedeutet, dass Text, Zahlen und sichtbares Layout identisch sein können, die in der Datei gespeicherten Daten jedoch unterschiedlich sein können.

Excel ist besonders schlecht: Wenn Sie einfach eine Tabelle öffnen, indem Sie sie speichern (nachdem Sie nichts unternommen haben ), können Sie eine neue Datei mit unterschiedlichem Inhalt erstellen.

* MD5 wird nicht mehr als ausreichend betrachtet. * Ist sehr kryptographisch sehr zutreffend, aber für die Überprüfung der Eindeutigkeit (bei Fehlen von Böswilligkeit, z. B. wenn Sie die Eingabe kontrollieren), ist es schnell und gut (und 128 Bit sollten ausreichend sein) Chris H vor 6 Jahren 6
msgstr "Eine Hash - Kollision mit identischen Dateigrößen ist weniger wahrscheinlich." - Tatsächlich haben die für MD5 erstellten Kollisionen normalerweise die gleiche Dateigröße. Paŭlo Ebermann vor 6 Jahren 0
"_follow es mit einem byteweisen Vergleich der beiden Dateien." Wenn Sie einen Dateivergleich durchführen wollen, können Sie dies auch zuerst tun ... es ist nicht sinnvoll, alle zu berechnenden Dateien zu lesen ihre Hashes, nur um beide Dateien erneut zu lesen, um sie zu vergleichen! TripeHound vor 6 Jahren 4
@TripeHound Es hängt davon ab, ob die Dateien sowohl lokal sind als auch nicht ... ob Sie bereits einen Hash von einem haben und eine neue Datei in das System einführen, ob die neue Datei sowieso einen in einer Datenbank gespeicherten Hash benötigt, etc ... Machen Sie den Anruf, der zu Ihrer Situation passt. Attie vor 6 Jahren 3
@ PaŭloEbermann Ich hätte mich daran erinnert - danke & behoben. Attie vor 6 Jahren 0
@ChrisH Fairer Punkt, danke - ich habe meine Antwort aktualisiert. Attie vor 6 Jahren 0
Nein, es ist kein Wahrscheinlichkeitsspiel. Sie schätzen falsch ein, wie unwahrscheinlich eine versehentliche Kollision ist. Es wird einfach nicht passieren. Es ist wahrscheinlicher, dass während des Vergleichs ein bisschen gewendet wird. Andererseits kann in einigen Szenarien eine vorsätzliche Kollision auftreten, und dies ist überhaupt kein Wahrscheinlichkeitsspiel. Gilles vor 6 Jahren 5
@Gilles nein, wie Attie sagt, es ist buchstäblich ein Wahrscheinlichkeitsspiel, basierend auf der Anzahl der Bits im Hash und der Anzahl der Dateien, mit denen Sie rechnen. Ein 32-Bit-Hash würde für einen durchschnittlichen Desktop-Benutzer wahrscheinlich gut funktionieren (abgesehen von Böswilligkeit) (CRC32 ist immer noch beliebt für einige Arten von heruntergeladenen Videodateien), nicht jedoch für ein Google-Scale-Big-Data-Dateisystem. mbrig vor 6 Jahren 2
@ mbrig: Ein 32-Bit-Hash hätte ein erhebliches Risiko versehentlicher Nichtübereinstimmung. Wenn Sie auf 128 oder 256 Bits gehen, ist der * große * Unterschied jedoch groß. Mit 128 Bit hätte eine Milliarde Affen, die jeweils eine Milliarde ansehnliche Dokumente mit zufälliger Größe eingeben, eine Chance von etwa 0,3%, zwei Dokumente mit demselben Hash zu erstellen. Mit 256 Bits wäre die Wahrscheinlichkeit, dass einer dieser Nicht-Milliarden von Dokumenten zufällig übereinstimmende Hash-Werte haben würde, selbst wenn Milliarden Affen pro Milliarde Jahre eine zufällige Größe von einer zufälligen Größe pro Sekunde in einer Sekunde eingeben könnten, verschwindend gering. supercat vor 6 Jahren 3
@mbrig Bei einem CRC handelt es sich teilweise um ein Wahrscheinlichkeitsspiel. Bei einem kryptografischen Hash, selbst bei einem kaputten Hash, ist die Wahrscheinlichkeit irrelevant: Sie werden dieses Spiel niemals gewinnen. Umgekehrt müssen Sie unabhängig davon, was der Hash ist, herausfinden, ob absichtliche Kollisionen ein Problem sind, und es geht dabei überhaupt nicht um die Wahrscheinlichkeit. Gilles vor 6 Jahren 0
@ Gilles: Das einzige, was es zu einem Wahrscheinlichkeitsspiel mit CRC machen würde, ist, dass CRCs in der Regel kürzer sind. Andernfalls wäre ein CRC oft weniger ein Wahrscheinlichkeitsspiel, da bestimmte Faktoren Korrelationen verursachen können. Ein einfaches Beispiel: Wenn Acme Spreadsheet durch das Speichern eines 32-Bit-CRCs mit jeder Datei die Dateiintegrität gewährleistet, melden andere Tools zum Berechnen des CRC einer Datei möglicherweise, dass alle Acme Spreadsheet-Dateien einen CRC von Null aufweisen, da der angefügte CRC das Muster wäre von Bits, die, wenn sie an den vorhergehenden Inhalt angehängt werden, den CRC der kombinierten Datei zu Null machen würden. supercat vor 6 Jahren 1
6

Kurze Antwort: Ein kryptografischer Hash soll Ihnen dabei helfen, ziemlich sicher zu sein, dass Dateien mit übereinstimmenden Hashwerten die gleichen sind. Wenn nicht absichtlich hergestellt, sind die Chancen von zwei geringfügig unterschiedlichen Dateien mit ähnlichen Hashwerten lächerlich gering. Wenn es darum geht, Dateien zu vergleichen und zu prüfen, die absichtlich manipuliert werden könnten, ist MD5 eine schlechte Wahl. (Verwenden Sie eine andere Hash-Funktion wie SHA3 oder BLAKE2.)

Lange Antwort: Eine ideale Hash-Funktion erzeugt eine nahezu einzigartige kryptografische Hash-Funktion für jedes einzelne Datenelement. Mit anderen Worten, wir wissen definitiv, dass es zwei Dateien in diesem Universum gibt, deren Hashwerte kollidieren. Die Wahrscheinlichkeit, dass diese beiden Dateien natürlich zusammenkommen, ist lächerlich klein.

Vor zehn Jahren habe ich beschlossen, dass ich so weit wie möglich von MD5 bleiben muss. (Natürlich erinnerte ich mich bis gestern an den falschen Grund dafür: zehn Jahre sind eine lange Zeit, verstehst du. Ich habe mir meine früheren Memos erneut angeschaut, um mich daran zu erinnern, und habe diese Antwort redigiert.) 1996 wurde MD5 gefunden anfällig für Kollisionsangriffe sein. 9 Jahre später konnten Forscher PostScript-Dokumente und (aua!) X.509-Zertifikate mit demselben Hash erstellen! MD5 war eindeutig defekt. (Megaupload.com verwendete auch MD5, und bei Hash-Kollisionen gab es eine Menge Hanky-Panky, was mir damals Probleme bereitete.)

Ich kam daher zu dem Schluss, dass MD5 zwar für das Vergleichen von gutartigen Dateien zuverlässig war (und immer noch zuverlässig ist), man jedoch aufhören muss, sie vollständig zu verwenden. Ich argumentierte, dass das Vertrauen in ihn das Risiko der Verwirklichung und des falschen Vertrauens mit sich bringt: Sobald Sie mit dem Vergleichen von Dateien mit ihren MD5-Hashes beginnen, vergessen Sie eines Tages den Feinabdruck der Sicherheit und vergleichen zwei Dateien, die absichtlich für denselben Hash erstellt wurden. Außerdem war es unwahrscheinlich, dass CPUs und Kryptoprozessoren Unterstützung dafür hinzufügten.

Das Originalposter hat jedoch noch weniger Gründe für die Verwendung von MD5, weil:

  1. Solange man nur zwei Dateien vergleicht, ist der Byte-für-Byte-Vergleich tatsächlich schneller als das Erzeugen der eigenen MD5-Hashes. Für den Vergleich von drei oder mehr Dateien ... nun, Sie haben jetzt einen legitimen Grund.
  2. Das OP spezifizierte "Möglichkeiten, dies zu überprüfen und ohne eine Reihe von Plugins zu installieren". Mit dem Befehl Get-FileHash von Windows PowerShell können SHA1-, SHA256-, SHA384-, SHA512- und MD5-Hashes generiert werden. Auf modernen Computern mit Hardwareunterstützung für SHA-Hash-Funktionen können diese schneller generiert werden.
Sie können Ihre eigene kryptographische Hash-Funktion in beliebiger Länge erstellen, true. Dann hat es aber eine * feste * Länge und das Taubenlochprinzip gilt ohnehin. Die allgemeine Antwort lautet: "Wenn Sie nur ihre Hashwerte vergleichen, können Sie nicht sicher sein, dass die beiden Dateien identisch sind". Kamil Maciorowski vor 6 Jahren 6
@ KamilMaciorowski Theoretisch kann ich das. Meine benutzerdefinierte Hash-Funktion kann einfach eine Kopie der größten Datei erstellen. Ich habe jedoch kein Interesse, dies weiter zu diskutieren. Die Wahrheit ist, Sie haben aus einem Grund herabgestimmt, der sich aus dem Nicken zusammensetzt, nur um zu beweisen, dass Sie klüger sind und es Ihnen einen Rückzieher macht. Jetzt können Sie die Abstimmung nicht zurücknehmen. vor 6 Jahren 2
Ich stimme @KamilMaciorowski zu ... Es ist ein Wahrscheinlichkeitsspiel ... Wenn Sie einen einzelnen Hash verwenden, können Sie "_reasonably_" sein, dass Dateien mit übereinstimmenden Hashwerten die gleichen sind, aber es gibt keine 100% ige Garantie. Die Verwendung besserer Algorithmen oder die Verwendung mehrerer Algorithmen können Ihr Selbstvertrauen verbessern - selbst das Vergleichen der Dateigrößen kann hilfreich sein. Sie können jedoch niemals zu 100% überzeugt sein, ohne Byte für Byte überprüfen zu müssen. Attie vor 6 Jahren 0
@Attie Huh! Das meinte ich ursprünglich. Vielen Dank. Nur ich bin nicht mit schicken Ausdrücken wie "Sie können einigermaßen sicher sein" vertraut. Es tut uns leid. Deshalb haben wir auch eine Schaltfläche zum Bearbeiten. Ich persönlich würde niemals eine gute Antwort wegwerfen, nur weil ein Wort falsch ist. Ich bearbeite es vor 6 Jahren 1
Über "Trashing a good answer": Bitte beachten Sie, dass ich zunächst sichergestellt habe, dass es sich nicht um einen Tippfehler handelt und Sie es wirklich meinen. dann abgestiegen und zur gleichen Zeit gab ich Ihnen Feedback, offenbarte meinen Grund in der Hoffnung, dass Ihre Antwort besser wird. Das tat es, also ist mein Downvote nicht mehr. Im Grunde habe ich dir gesagt, was ich mit deiner Antwort falsch finde, Attie half zu klären, du hast die Antwort verbessert. Aus meiner Sicht haben wir alle diese Situation richtig angepackt und die ganze Geschichte verlief sehr gut. Vielen Dank. Kamil Maciorowski vor 6 Jahren 1
@ KamilMaciorowski Sehr gut; Ich betrachte das als einen Akt des guten Glaubens. vor 6 Jahren 0
6
Gilles

Wenn zwei Dateien denselben MD5-Hash haben und nicht beide speziell erstellt wurden, sind sie identisch. Wie schwierig es ist, Dateien mit demselben MD5-Hash zu erstellen, hängt vom Dateiformat ab. Ich weiß nicht, wie einfach Excel-Dateien sind.

Wenn Sie also eigene Dateien haben, die nur herumliegen und Duplikate suchen möchten, ist MD5 sicher. Wenn Sie eine der Dateien geschrieben haben und die andere Datei zweifelhaften Ursprungs ist, ist MD5 immer noch sicher (die einzige Möglichkeit, unterschiedliche Dateien mit derselben MD5-Prüfsumme zu erhalten, besteht darin, beide Dateien zu erstellen). Wenn jemand, dem Sie nicht vertrauen, einen Budgetvorschlag sendet und später eine andere Datei sendet, von der sie behaupten, dass sie dieselbe ist, ist MD5 möglicherweise nicht ausreichend.

Verwenden Sie zur Vermeidung von Risiken SHA-256 oder SHA-512 anstelle von MD5. Wenn zwei Dateien denselben SHA-256-Hash haben, sind sie identisch. Gleiches gilt für SHA-512. (Es gibt theoretisch die Möglichkeit, dass sie unterschiedlich sein könnten, aber die Wahrscheinlichkeit, dass dies versehentlich geschieht, ist so viel geringer als die Wahrscheinlichkeit, dass Ihr Computer während der Überprüfung ein wenig kippt, als es einfach nicht relevant ist. Für jemanden, der absichtlich zwei Dateien erstellt Dasselbe Hash, weiß niemand, wie man das für SHA-256 oder SHA-512 macht.)

Wenn zwei Excel-Dateien unterschiedliche Hashwerte haben, sind sie unterschiedlich, aber es gibt keine Möglichkeit, zu wissen, wie sehr sie sich unterscheiden. Sie könnten identische Daten haben, aber unterschiedliche Formatierungen, oder sie könnten sich nur in den Eigenschaften unterscheiden oder sie wurden möglicherweise von verschiedenen Versionen gespeichert. Wenn Excel in etwa wie Word ist, werden durch das Speichern einer Datei die Metadaten aktualisiert. Wenn Sie nur die numerischen Daten und Textdaten vergleichen und Formatierungen und Eigenschaften ignorieren möchten, können Sie die Tabellenkalkulationen in CSV exportieren, um sie zu vergleichen.

Wenn Sie über Unix / Linux-Tools verfügen, können Sie cmpzwei Dateien vergleichen. Um zwei Dateien auf demselben Rechner zu vergleichen, machen Prüfsummen die Sache nur komplizierter.

* Wenn zwei Dateien denselben MD5-Hash haben und nicht beide speziell entworfen wurden, sind sie identisch. * Das ist falsch. Es gibt unendlich viele mögliche Nachrichten, aber nur 646 mögliche 64-Bit-Hashes. Es wird das ["Pigeonhole-Prinzip"] (https://en.wikipedia.org/wiki/Pigeonhole_principle) genannt: "Das Pigeonhole-Prinzip besagt, dass" n "-Elemente in" m "-Container mit" n> m "gestellt werden dann muss mindestens ein Container mehr als einen Artikel enthalten. " Wenn Sie mehr als 2 ^ 64 Nachrichten erstellen, kommt es zu Kollisionen ohne "besondere Verarbeitung". Und Sie könnten mit nur 2. Andrew Henle vor 6 Jahren 0
@AndrewHenle, MD5 ist nicht 64-Bit, sondern 128. Wenn eine zufällige Kollision durch uns zu Zeiten des Hitzetods des Universums führt, ist dies nur für eine extrem akademische (daher nutzlose) Definition "möglich". Charles Duffy vor 6 Jahren 0
@CharlesDuffy Sie gehen davon aus, dass der Hash zufällig verteilt ist. Es ist nicht. Andrew Henle vor 6 Jahren 0
Eine effektive Entsprechung mit der Zufallsverteilung ist ein Teil der Definition eines guten kryptografischen Hashes - es gibt viele Runden des Mischens aus einem bestimmten Grund. Sicher gibt es schwache Hash-Algorithmen, aber die Fokussierung auf diese Schwächen bringt uns in die zuvor genannten Vorbehalte bei absichtlichen Angriffen. (Oder sagen Sie, dass MD5 nur 64 Bit hat, die tatsächlich zufällig sind? Ich gebe zu, dass ich nicht mitgekommen bin, also ist das plausibel - bitte Link?) Charles Duffy vor 6 Jahren 0
@AndrewHenle Ich behaupte nicht, dass eine Kollision mathematisch unmöglich ist, was falsch wäre, aber hier nicht relevant ist. Ich behaupte, dass es nicht geschehen ist, was wahr ist. Ihr Kommentar ist in einer Weise falsch, die das Geschäft vollständig ändert. Es gibt 2 ^ 128 mögliche MD5-Hashes, nicht 2 ^ 64. Dies bedeutet, dass Sie 2 ^ 128 Hashes generieren müssen, um sicher zu sein, dass eine Kollision erzeugt wird. Durch das Geburtstags-Paradoxon würde 2 ^ 64 tatsächlich eine makroskopische Chance für eine Kollision zwischen den von Ihnen erzeugten Hashes geben (nicht mit einem zuvor generierten Hash). Dies ist jedoch umstritten, da wir wissen, wie man eine Kollision herstellt. Gilles vor 6 Jahren 0
* Wenn zwei Dateien den gleichen MD5-Hash haben und nicht beide speziell entwickelt wurden, sind sie identisch. * Dies ist eine Aussage, die behauptet, dass die einzige Möglichkeit, eine Kollision zu erhalten, darin besteht, eine "Spezialanfertigung" durchzuführen . Das ist falsch. Kollisionen sind möglich, egal wie unwahrscheinlich. * Ich sage, dass es nicht passiert ist, was wahr ist. * Wieder liegen Sie falsch. Kollisionen können passieren. Ich bin Zeuge eines gewesen. Andrew Henle vor 6 Jahren 0
@CharlesDuffy * Oder willst du damit sagen, dass MD5 nur 64 Bits hat, die tatsächlich zufällig sind? * Ich habe 128 zu 64 geändert, um das Post-Limit einzuhalten - es war so eng. Das Prinzip bleibt jedoch dasselbe. Andrew Henle vor 6 Jahren 0
@AndrewHenle Wenn Sie Zeuge einer _accidental_ MD5-Kollision waren, veröffentlichen Sie sie bitte. Du wärst der Erste. „Ich habe 128 zu 64 geändert, um das Post-Limit zu erreichen - es war so knapp. Das Prinzip bleibt jedoch dasselbe. “Was Sie? Nein, 2 ^ 128 ist so viele Größenordnungen größer als 2 ^ 64, dass es einen qualitativen Unterschied macht. Es ist der Unterschied zwischen "Laufen Sie Ihren Computer für eine Weile" und "Nicht in Ihrem Leben". Gilles vor 6 Jahren 0
5
styrofoam fly

Hashes wie MD5 oder SHA haben eine feste Länge, sagen wir, es sind 300 alphanumerische Zeichen (in Wirklichkeit sind sie kürzer und verwenden nicht den gesamten Satz alphanumerischer Zeichen).

Angenommen, Dateien bestehen aus alphanumerischen Zeichen und einer Größe von bis zu 2 GB.

Sie können leicht erkennen, dass es weitaus mehr Dateien (mit einer Größe von bis zu 2 GB) als mögliche Hashwerte gibt. Das Pigeonhole-Prinzip besagt, dass einige (unterschiedliche) Dateien die gleichen Hash-Werte haben müssen.

Wie auf Shattered.io 1 gezeigt, können Sie auch zwei verschiedene Dateien haben: Shattered.io/static/shattered-1.pdf und shattered.io/static/shattered-2.pdf, die den gleichen SHA-1-Hashwert haben komplett anders.

1 SHA1 ist ein "stärkerer" Hash-Algorithmus als md5

Die Wahrscheinlichkeit eines zufälligen Zusammenstoßes ist zu gering, um dies zu berücksichtigen. Das Risiko einer vorsätzlichen Kollision besteht auch für MD5 und ist schlechter als für SHA-1, das hier nicht besonders relevant ist. Gilles vor 6 Jahren 0
5
Andrew Henle

Ich habe 2 Excel-Dokumente und möchte überprüfen, ob sie mit Ausnahme des Dateinamens identisch sind.

Aus praktischer Sicht ist ein direkter Vergleich der Dateien, um herauszufinden, ob sie sich unterscheiden, schneller als das Berechnen eines Hashwerts für jede Datei und das Vergleichen des Hashwerts.

Um die Hashes zu berechnen, müssen Sie den gesamten Inhalt beider Dateien lesen.

Um festzustellen, ob sie durch einen direkten Vergleich identisch sind, müssen Sie nur den Inhalt beider Dateien lesen, bis sie nicht übereinstimmen. Wenn Sie einen Unterschied feststellen, wissen Sie, dass die Dateien nicht identisch sind, und Sie müssen keine weiteren Daten aus beiden Dateien lesen.

Und bevor Sie dies tun, können Sie einfach die Größe der beiden Dateien vergleichen. Bei unterschiedlichen Größen können die Inhalte nicht gleich sein.

Wenn Sie zwei Dateien auf einem physischen Laufwerk verwenden, ist die Verwendung einer Hash-Funktion, die die E / A-Geschwindigkeit für jede Datei separat berücksichtigen kann, möglicherweise etwas schneller als beim Vergleich der Dateien, da zwischen dem Lesen der beiden Dateien nicht gewechselt werden muss. Der Ort, an dem Hashes wirklich glänzen, ist der, wenn man versucht, Vergleiche mit vielen Dateien durchzuführen, die zu groß sind, um in den Speicher zu passen. Selbst wenn Sie lediglich herausfinden möchten, ob alle übereinstimmen, vergleichen Sie Datei 1 mit Datei 2, dann Datei 1 mit Datei 3, dann können Datei 1 bis Datei 4 usw. fast doppelt so langsam sein wie das Berechnen all ihrer Hashwerte. supercat vor 6 Jahren 0
@supercat Wenn die Dateien in Blöcken gelesen werden, die größer als ein MB sind, wird das Umschalten zwischen den Dateien nicht wahrgenommen. Wenn in einem Arbeitsablauf mehrere Dateien verglichen werden, um Dubletten zu finden, kann der Hash ebenso berechnet werden, wie jede Datei geschrieben wird. Da dies jedoch der Fall ist, kann dies ziemlich kostenlos erfolgen. Andrew Henle vor 6 Jahren 0
Wenn genügend Speicherplatz vorhanden ist, um große Teile der Dateien zu puffern, müssen die Umschaltzeiten kein Problem sein, aber ansonsten sind sie möglicherweise ein Problem. Was das Berechnen der Hashes beim Schreiben von Dateien angeht, kann dies in Ordnung sein, wenn garantiert werden kann, dass Dateien nicht geändert werden können, ohne dass gespeicherte Hashes geändert oder zumindest ungültig gemacht werden. Wenn Sie versuchen, eine redundante Sicherung der Dateien zu vermeiden, kann das Betrachten nur der gespeicherten Hash-Werte dazu führen, dass eine versehentlich beschädigte Datei gesichert wird, nicht aber die nicht beschädigten Dateien, für die die beschädigte Datei *, aber nicht *, übereinstimmen soll t *. supercat vor 6 Jahren 0
"Wenn Sie einen Unterschied feststellen, wissen Sie, dass die Dateien nicht identisch sind" - nicht unbedingt. XLSX-Dateien sind ZIP-Dateien, in denen der Inhalt möglicherweise in anderer Reihenfolge gespeichert werden kann und immer noch denselben Inhalt hat. Aber auch wenn Sie sie dekomprimieren und jede einzelne Datei vergleichen, enthält die XLSX-Datei XML-Dokumente, die z. B. unterschiedliche Zeilenenden haben können, ohne den Inhalt zu beeinträchtigen. Thomas Weller vor 6 Jahren 0
4
mckenzm

NEIN. Unterschiedliche Werte garantieren, dass die Dateien unterschiedlich sind. Die gleichen Werte sind keine Garantie dafür, dass die Dateien gleich sind. Es ist relativ einfach, Beispiele mit CRC16 zu finden.

In der Balance der Wahrscheinlichkeit mit zeitgenössischen Hash-Schemata sind sie gleich.

Die Frage betrifft MD5, bei der es nicht zu versehentlichen Kollisionen kommen kann. Es besteht das Risiko vorsätzlicher Kollisionen, aber das ist keine Frage der Wahrscheinlichkeiten. Gilles vor 6 Jahren 1
Es geht auch um Excel-Tabellenkalkulationen mit unterschiedlichen Namen. Wie groß können sie sein, dass ein Byte für den Byte-Vergleich keine Option sein kann? Zwei Hash-Schemata zusammen bieten Sicherheit. mckenzm vor 6 Jahren 1
@Gilles * Alle * Hash-Codes haben per Definition die Gefahr versehentlicher Kollisionen. Der einzige Ausweg ist die Verwendung der gesamten Datei als Hashcode. Ihr Kommentar macht keinen Sinn. user207421 vor 6 Jahren 2
3
David Rice

Ihre Frage ist jedoch rückwärts - nehmen wir an, der Hash bedeutet, dass sie dieselben Daten haben (was nicht zu 100% garantiert ist, aber für eine Lebensdauer von Dateien im Sekundenvergleich geeignet ist, um keine Kollision zu treffen). Daraus folgt nicht notwendigerweise, dass die gleichen Daten bedeuten, dass sie denselben Hash haben. Also nein - man kann nicht die Daten vergleichen, in einer Excel mit den Daten in einem anderen Datei Excel - Datei durch die Datei - Hashing, weil es eine gibt viele Möglichkeiten, wie zwei Dateien, ohne die zugrunde liegenden Daten unterschiedlich unterscheiden können. Ein offensichtlicher Weg - die Daten werden als XML gespeichert, jede Zelle hat einen eigenen XML-Knoten. Wenn diese Knoten in unterschiedlicher Reihenfolge gespeichert werden, sind die Daten gleich, die Datei jedoch unterschiedlich.

3
Giulio Muscarello

Um die anderen Antworten hinzuzufügen, finden Sie hier viele Beispiele für Paare von Dateien mit demselben MD5-Hash und unterschiedlichen Inhalten.

Ziemlich Link-Antwort, aber interessant. Thomas Weller vor 6 Jahren 0