Ich habe 2 Excel-Dokumente und möchte überprüfen, ob sie bis auf den Dateinamen genau gleich sind.
Zum Beispiel heißen die Dateien fileone.xls
und filetwo.xls
. Abgesehen von den Dateinamen wird davon ausgegangen, dass deren Inhalt identisch ist, aber das ist es, was ich überprüfen möchte.
Ich habe nach Möglichkeiten gesucht, dies zu überprüfen, ohne eine Reihe von Plugins zu installieren. Es scheint keinen direkten Weg zu geben.
Ich habe versucht, MD5-Hashes für beide Dateien zu generieren. Wenn die Hashes identisch sind, bedeutet dies, dass der Dateiinhalt 1: 1 identisch ist?
cmp
Unix oderfc
(Datei vergleichen) unter Windows vergleichen.diff -s file1 file2
Wenn angegeben wird, dass sie identisch sind, sind sie identisch (tatsächlich werden die Dateien Byte für Byte verglichen, sodass selbst Hash-Kollisionen ausgeschlossen sind). Prüfsummen werden verwendet, wenn Sie nur einen Hash und ein Element haben, von dem angenommen wird, dass es mit dem Urheber dieses Hash identisch ist.Antworten:
Alle Dateien sind eine Sammlung von Bytes (Werte 0-255). Wenn zwei MD5-Hashes übereinstimmen, sind diese beiden Byte-Sammlungen höchstwahrscheinlich identisch (gleiche Reihenfolge, gleiche Werte).
Es ist sehr unwahrscheinlich, dass zwei Dateien dasselbe MD5 generieren, das ist ein 128-Bit-Hash. Die Wahrscheinlichkeit ist:
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ückerhalten.
Die 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 wurden Methoden entdeckt,
um einen MD5-Hash zu verwenden und Daten zu erstellen, die mit dem Hash übereinstimmen. Dabei werdenzwei Dokumente erstellt, die denselben MD5-Hash aufweisen ( Kollisionsangriff ). Siehe @ user2357112's Kommentar unten. Dies bedeutet, dass ein Angreifer beispielsweise zwei ausführbare Dateien erstellen kann, die dasselbe MD5 haben. Wenn Sie abhängig von MD5 bestimmen, welchem Sie vertrauen möchten, werden Sie getäuscht.Daher sollte MD5 nicht für Kryptografie oder Sicherheit verwendet werden. Es ist schlecht, ein MD5 auf einer Download-Site zu veröffentlichen, um beispielsweise die Download-Integrität sicherzustellen. Abhängig von einem MD5-Hash, den Sie nicht selbst generiert haben, um zu überprüfen, ob Datei- oder Dateninhalte vorhanden sind, möchten Sie dies vermeiden.
Wenn Sie Ihre eigenen erstellen, wissen Sie, dass Sie sich selbst (hoffentlich) nicht bösartig gegenüberstehen. Für Ihre Verwendung ist es in Ordnung, aber wenn Sie möchten, dass jemand anderes es reproduzieren kann und Sie den MD5-Hash öffentlich veröffentlichen möchten, sollten Sie einen besseren Hash verwenden.
Beachten Sie, dass zwei Excel-Dateien dieselben Werte in denselben Zeilen und Spalten enthalten können, der Bytestream der Datei jedoch aufgrund unterschiedlicher Formatierungen, Stile, Einstellungen usw. völlig unterschiedlich sein kann.
Wenn Sie die Daten in der Datei vergleichen möchten, exportieren Sie sie zuerst mit denselben Zeilen und Spalten in die CSV-Datei, um alle Formatierungen zu entfernen und dann die CSV-Dateien zu hashen oder zu vergleichen.
quelle
diff
oder ein ähnliches Dienstprogramm verwenden, um tatsächlich zu bestätigen, dass die Dateien Byte für Byte identisch sind, anstatt nur denselben Hash zu haben.diff -s
überprüfe, ob die CSV identisch sind. In der Tat können Siediff -s
sogar die Excel-Dateien: Wenndiff
gesagt wird, dass sie identisch sind, müssen Sie nicht zum CSV-Vergleich gehen.In der Praxis bedeutet ein identischer kryptografischer Hash, dass die Dateien identisch sind, sofern sie nicht von einem Angreifer oder einer anderen böswilligen Entität erstellt wurden. Die Wahrscheinlichkeit, dass zufällige Kollisionen mit einer gut konzipierten kryptografischen Hash-Funktion auftreten, ist so gering, dass sie in der Praxis und bei Abwesenheit eines aktiven Angreifers vernachlässigbar sind.
Im Allgemeinen können wir jedoch nicht sagen, dass zwei beliebige Dateien mit demselben Hash definitiv bedeuten, dass sie identisch sind.
Die Funktionsweise einer kryptografischen Hash-Funktion besteht darin, eine Eingabe beliebiger Länge zu übernehmen und einen aus der Eingabe berechneten Wert fester Länge auszugeben. Einige Hash-Funktionen haben mehrere Ausgabelängen zur Auswahl, aber die Ausgabe ist bis zu einem gewissen Grad immer noch ein Wert mit fester Länge. Dieser Wert kann bis zu ein paar Dutzend Bytes lang sein. Die heute gebräuchlichsten Hash-Algorithmen mit dem längsten Ausgabewert haben eine 512-Bit-Ausgabe und eine 512-Bit-Ausgabe beträgt 64 Byte.
Wenn eine Eingabe in eine Hash-Funktion länger ist als die Ausgabe der Hash-Funktion, muss eine gewisse Genauigkeit entfernt werden, damit die Eingabe in die Ausgabe passt. Infolgedessen müssen mehrere Eingänge vorhanden sein, deren Länge größer ist als die Länge des Ausgangs, und die den gleichen Ausgang 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, aber unterschiedlich sind, sollten diese (unter der Annahme, dass kein Fehler im Algorithmus vorliegt) unterschiedliche Werte haben, unabhängig vom Inhalt der Dateien. In mathematischer Hinsicht ist der Hash eine Funktion, die einen 2 256- Eingaberaum auf einen 2 256- Ausgaberaum abbildet, was ohne Kollisionen möglich sein sollte. Wenn Sie jedoch zwei Dateien mit einer Länge von jeweils 33 Byte haben, muss eine Kombination von Eingaben vorhanden sein, die für beide Dateien denselben 32-Byte-Ausgabehashwert ergeben, da wir jetzt einen 2 264- Eingabebereich auf eine 2 256- Datei abbildenAusgaberaum; hier können wir leicht erkennen, dass es durchschnittlich 2 8 Eingänge für jeden einzelnen Ausgang geben sollte. Gehen Sie noch weiter, und bei 64-Byte-Dateien sollten für jeden einzelnen Ausgang 2 256 Eingänge vorhanden sein!
Kryptografische Hash-Funktionen sind so konzipiert, dass es schwierig ist , eine Eingabe zu erstellen, die eine bestimmte Ausgabe ergibt, oder zwei Eingaben zu erstellen, 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, wirklich, wirklich, wirklich schwer sein. (Ein kleiner Sonderfall eines Kollisionsangriffs ist ein Geburtstagsangriff .)
Einige Algorithmen können Angreifern besser widerstehen als andere. MD5 wird heutzutage allgemein als komplett kaputt angesehen, aber zuletzt hatte es immer noch eine ziemlich gute Beständigkeit gegen das erste Bild . SHA-1 wird ebenfalls effektiv gebrochen; Präimage-Angriffe wurden demonstriert, erfordern jedoch bestimmte Bedingungen, obwohl es keinen Grund zu der Annahme gibt, dass dies auf unbestimmte Zeit der Fall sein wird. Angriffe werden immer besser und nie schlimmer. SHA-256/384/512 werden derzeit noch für die meisten Zwecke als sicher angesehen. Aber wenn Sie, sind nur daran interessiert, wenn zwei Nicht- in böser Absicht erstellten, gültigDateien sind die gleichen, dann sollte eine dieser Dateien ausreichen, da der Eingabebereich bereits so begrenzt ist, dass Sie sich hauptsächlich für zufällige Kollisionen interessieren. Wenn Sie Grund zu der Annahme haben, dass die Dateien in böswilliger Absicht erstellt wurden, müssen Sie mindestens eine derzeit als sicher geltende kryptografische Hash-Funktion verwenden, die den unteren Balken auf SHA-256 setzt.
Das erste Vorbild ist, eine Eingabe zu finden, die einen bestimmten Ausgabehashwert ergibt. Das zweite Vorbild ist, einen Eingang zu finden, der den gleichen Ausgang liefert wie ein anderer, spezifizierter Eingang. Eine Kollision besteht darin, zwei Eingaben zu finden, die dieselbe Ausgabe ergeben, unabhängig davon, was das ist, und manchmal unabhängig davon, was die Eingaben sind.
Dabei ist zu beachten, dass die Dateien möglicherweise sehr unterschiedliche Datendarstellungen aufweisen und dennoch exakt 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.
quelle
Es ist ein Wahrscheinlichkeitsspiel ... Hashes können eine endliche Anzahl von Werten darstellen.
Wenn wir einen hypothetischen (und sehr schwachen) 8-Bit-Hashing-Algorithmus betrachten, kann dies 256 verschiedene Werte darstellen. Wenn Sie anfangen, Dateien durch den Algorithmus zu führen, werden Sie beginnen, Hashes auszugeben ... aber in Kürze werden Sie " Hash-Kollisionen " sehen. Dies bedeutet, dass zwei verschiedene Dateien in den Algorithmus eingespeist wurden und derselbe Hashwert wie die Ausgabe erzeugt wurde. Hier ist der Hash eindeutig nicht stark genug, und wir können nicht behaupten, dass " Dateien mit übereinstimmenden Hashes den gleichen Inhalt haben ".
Das Erweitern der Größe des Hashs und die Verwendung stärkerer kryptografischer Hashing-Algorithmen können erheblich dazu beitragen, Kollisionen zu reduzieren und unser Vertrauen zu stärken, dass zwei Dateien mit demselben Hash den gleichen Inhalt haben.
Das heißt, wir können 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 Situationen ist dies in Ordnung und das Vergleichen von Hashes ist " gut genug ", dies hängt jedoch von Ihrem Bedrohungsmodell ab.
Letztendlich würde ich Ihnen Folgendes empfehlen, wenn Sie das Sicherheitsniveau erhöhen müssen:
Wenn Sie 100% sicher sein müssen, beginnen Sie auf jeden Fall mit einem Hash, aber wenn die Hashes übereinstimmen, führen Sie einen byteweisen Vergleich der beiden Dateien durch.
Darüber hinaus bedeutet die Komplexität der von Anwendungen wie Word und Excel erstellten Dokumente, 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 diese - einfach eine Tabelle zu öffnen es zu speichern (mit getan nichts ) kann eine neue Datei, mit unterschiedlichen Inhalten produzieren.
quelle
Wenn zwei Dateien denselben MD5-Hash haben und sie nicht speziell gestaltet 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 es mit Excel-Dateien ist.
Wenn Sie also eigene Dateien haben, die nur herumliegen und Duplikate suchen, 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, Ihnen einen Budgetvorschlag sendet und später eine andere Datei sendet, von der er behauptet, dass sie dieselbe ist, reicht MD5 möglicherweise nicht aus.
Verwenden Sie SHA-256 oder SHA-512 anstelle von MD5, um Risiken zu vermeiden. Wenn zwei Dateien denselben SHA-256-Hash haben, sind sie identisch. Gleiches gilt für SHA-512. (Es gibt eine theoretische Möglichkeit, dass sie unterschiedlich sein könnten, aber die Wahrscheinlichkeit, dass dies versehentlich passiert, ist so viel geringer als die Wahrscheinlichkeit, dass Ihr Computer während der Überprüfung ein wenig kippt, als dass es einfach nicht relevant ist Keiner weiß, wie das bei SHA-256 oder SHA-512 geht.)
Wenn zwei Excel-Dateien unterschiedliche Hashes haben, sind sie unterschiedlich, aber es gibt keine Möglichkeit, festzustellen, um wie viel sie sich unterscheiden. Sie können identische Daten, aber unterschiedliche Formatierungen haben, oder sie können sich nur in den Eigenschaften unterscheiden, oder sie wurden möglicherweise von verschiedenen Versionen gespeichert. Wenn Excel mit Word vergleichbar ist, werden beim Speichern einer Datei lediglich die Metadaten aktualisiert. Wenn Sie nur die Zahlen- und Textdaten vergleichen und Formatierungen und Eigenschaften ignorieren möchten, können Sie die Arbeitsblätter in CSV exportieren, um sie zu vergleichen.
Wenn Sie über Unix / Linux-Tools verfügen, können Sie
cmp
zwei Dateien miteinander vergleichen. Um zwei Dateien auf demselben Computer zu vergleichen, werden die Dinge durch Prüfsummen nur noch komplizierter.quelle
n
Gegenstände inm
Behälter mitn > m
gefüllt werden." Wenn Sie mehr als 2 ^ 64 Nachrichten erstellen, haben Sie Kollisionen ohne besondere Bearbeitung. Und Sie könnten mit nur 2.Kurze Antwort: Ein kryptografischer Hash soll Ihnen dabei helfen, einigermaßen sicher zu sein, dass Dateien mit übereinstimmenden Hashes identisch sind. Sofern nicht absichtlich manipuliert, ist die Wahrscheinlichkeit, dass zwei leicht unterschiedliche Dateien ähnliche Hashwerte aufweisen, lächerlich gering. Aber wenn es darum geht, Dateien zu vergleichen und zu überprü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 ist eine, die für jedes einzelne Datenelement einen fast eindeutigen kryptografischen Hash erstellt. Mit anderen Worten, wir wissen definitiv, dass es zwei Dateien in diesem Universum gibt, deren Hash-Werte kollidieren. Die Wahrscheinlichkeit, dass diese beiden Dateien auf natürliche Weise zusammenkommen, ist lächerlich gering.
Vor zehn Jahren habe ich beschlossen, so weit wie möglich von MD5 weg zu bleiben. (Natürlich erinnerte ich mich bis gestern an den falschen Grund dafür. Zehn Jahre sind eine lange Zeit, verstehen Sie? Ich habe meine früheren Memos noch einmal durchgesehen, um mich daran zu erinnern, warum und diese Antwort bearbeitet.) Sie sehen, 1996 wurde MD5 mit gefunden anfällig für Kollisionsangriffe sein. 9 Jahre später konnten Forscher mit demselben Hash zwei PostScript-Dokumente und (autsch!) X.509-Zertifikate erstellen! MD5 war eindeutig defekt. (Megaupload.com verwendete auch MD5 und es gab eine Menge Taschentücher mit Hash-Kollisionen, die mir damals Probleme bereiteten.)
Daher kam ich zu dem Schluss, dass MD5 zwar zuverlässig für den Vergleich von harmlosen Dateien ist (und es immer noch gibt), man es jedoch nicht mehr verwenden muss. Wenn Sie sich darauf verlassen, kann dies zu Nachsicht und falschem Vertrauen führen: Wenn Sie mit dem Vergleichen von Dateien mit ihren MD5-Hashes beginnen, vergessen Sie eines Tages den Sicherheitsfeinabdruck und vergleichen zwei Dateien, die absichtlich mit demselben Hash erstellt wurden. Darüber hinaus ist es unwahrscheinlich, dass CPUs und Kryptoprozessoren diese Funktion unterstützen.
Das Originalposter hat jedoch noch weniger Gründe, MD5 zu verwenden, weil:
quelle
Aus praktischer Sicht ist es schneller, die Dateien direkt zu vergleichen, um festzustellen, ob sie unterschiedlich sind, als für jede Datei einen Hash zu berechnen und dann diesen Hash zu vergleichen.
Um die Hashes zu berechnen, müssen Sie den gesamten Inhalt beider Dateien lesen.
Um durch direkten Vergleich festzustellen, ob sie identisch sind, müssen Sie nur den Inhalt beider Dateien lesen, bis sie nicht mehr übereinstimmen. Sobald Sie einen Unterschied feststellen, wissen Sie, dass die Dateien nicht identisch sind und Sie keine Daten mehr aus den beiden Dateien lesen müssen.
Und bevor Sie dies tun, können Sie einfach die Größe der beiden Dateien vergleichen. Wenn sich die Größen unterscheiden, kann der Inhalt nicht gleich sein.
quelle
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 alphanumerischen Zeichensatz).
Nehmen wir an, dass Dateien aus alphanumerischen Zeichen bestehen und bis zu 2 GB groß sind.
Sie können leicht erkennen, dass es weit mehr Dateien gibt (mit einer Größe von bis zu 2 GB) als mögliche Hash-Werte. Das Pigeonhole-Prinzip besagt, dass einige (verschiedene) Dateien dieselben Hashwerte haben müssen.
Wie in 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, während sie sich in einem Zustand befinden völlig anders.
1 SHA1 ist ein "stärkerer" Hashing-Algorithmus als md5
quelle
NEIN. Unterschiedliche Werte garantieren, dass die Dateien unterschiedlich sind. Dieselben Werte sind keine Garantie dafür, dass die Dateien identisch sind. Es ist relativ einfach, Beispiele mit CRC16 zu finden.
Im Gleichgewicht der Wahrscheinlichkeit mit zeitgenössischen Hashing-Schemata sind sie gleich.
quelle
Ihre Frage ist jedoch verkehrt herum - nehmen wir an, dass der Hash die gleichen Daten enthält (was nicht zu 100% garantiert ist, aber für ein Leben lang ausreicht, um Dateien jede Sekunde zu vergleichen, um keine Kollision zu verursachen). Daraus folgt nicht zwangsläufig, dass dieselben Daten denselben Hash haben. Nein, Sie können die Daten in einer Excel-Datei nicht mit den Daten in einer anderen Excel-Datei vergleichen, indem Sie die Datei hashen, da es viele Möglichkeiten gibt, wie sich zwei Dateien unterscheiden können, ohne dass sich die zugrunde liegenden Daten unterscheiden. Ein offensichtlicher Weg - die Daten werden als XML gespeichert, jede Zelle hat einen eigenen XML-Knoten. Wenn diese Knoten in unterschiedlicher Reihenfolge gespeichert sind, sind die Daten identisch, die Datei jedoch unterschiedlich.
quelle
Um die anderen Antworten zu ergänzen, finden Sie hier viele Beispiele für Dateipaare mit demselben MD5-Hash und unterschiedlichem Inhalt.
quelle
Die Antwort für dieses OP wurde gegeben, könnte aber von einer Zusammenfassung profitieren.
Wenn Sie überprüfen möchten, ob zwei Dateien identisch sind, hängt vieles davon ab, ob Sie die Dateien und Hashes kontrollieren.
Wenn Sie die Hashes selbst aus den Dateien generieren und Sie sich ziemlich sicher sind, dass kein anderer die Gelegenheit / Fähigkeit / Motivation hatte, absichtlich zu versuchen, zu einer falschen Schlussfolgerung zu gelangen, dann sind fast alle Hashes - auch "bekannte, kaputte" Hashes wie MD5 und SHA1 - mit ziemlicher Sicherheit ausreichend. Aber das, ich meine , können Sie Dateien mit hohen Geschwindigkeit erzeugen Millionen von Jahren , und Sie würden immer noch unwahrscheinlich sein , mit zwei beliebigen Dateien , um am Ende der tatsächlich unterschiedlich sind , aber die gleiche Hash. Es ist mit ziemlicher Sicherheit sicher.
Dies ist das Szenario, in dem Sie schnell prüfen möchten, ob zwei Verzeichnisse auf Ihrem PC oder Dateiserver denselben Inhalt haben, ob Dateien in einem Verzeichnis exakte Duplikate usw. sind, und Sie sind sich ziemlich sicher, dass die Dateien nicht vorhanden sind wurde entwickelt / illegal modifiziert, und Sie vertrauen darauf, dass Ihre Hashing-App / Ihr Dienstprogramm korrekte Ergebnisse liefert.
Wenn Sie sich in einem Szenario befinden, in dem eine der Dateien - oder ein vorberechneter Hash - manipuliert oder manipuliert wurde, um Sie zu einer falschen Schlussfolgerung zu verleiten, benötigen Sie einen stärkeren (ununterbrochenen) Hash und / oder eine andere Sicherheit. Wenn Sie beispielsweise eine Datei herunterladen und anhand eines Hashs überprüfen, ob sie gültig ist, kann ein Angreifer möglicherweise eine fehlerhafte Datei mit dem richtigen Hash erstellen oder die Website angreifen, um einen falschen Hash zu platzieren, wenn Sie nach dem "richtigen" suchen " (erwarteter Wert. Dies ist auf umfassendere Sicherheitsprobleme zurückzuführen.
quelle
In der Windows-Befehlszeile können Sie mit dem
comp
Dienstprogramm ermitteln, ob zwei Dateien identisch sind. Zum Beispiel:quelle
Nein . Wenn die Hashes sind unterschiedlich, es nicht bedeutet , dass der Inhalt unterschiedlich sind. Gleiche Hashcodes bedeuten nicht den gleichen Inhalt. Ein Hashcode ist per Definition eine Reduzierung einer großen Domain auf einen kleineren Bereich: Die Implikation ist, dass Hashcodes über ungleichen Inhalt gleich sein können. Sonst hätte es keinen Sinn, sie zu berechnen.
quelle
Diese Antwort soll eine handliche Karte von Szenarien sein, die auftreten können oder nicht, und Argumente, die Sie anwenden können. Lesen Sie die anderen Antworten, um zu erfahren, warum Hash-Funktionen auf diese Weise funktionieren.
Nachdem Sie eine Hash-Funktion ausgewählt und sich daran gehalten haben, sollten Sie folgende Kombinationen berücksichtigen:
Das Szenario, in dem identische Dateien unterschiedliche Hashwerte generieren, ist das einzige Szenario, das absolut unmöglich ist.
Zwei Argumente, die immer zutreffen:
Zwei Gründe, die nicht streng sind :
quelle
Ja, identische Hashes bedeuten für Ihre Zwecke identische Dateien.
Wie andere Antworten verdeutlichen, ist es möglich, zwei verschiedene Dateien zu erstellen, die denselben Hash ergeben, und MD5 ist in dieser Hinsicht nicht besonders robust.
Verwenden Sie daher einen stärkeren Hashing-Algorithmus, wenn Sie eine große Anzahl von Excel-Dokumenten vergleichen möchten oder wenn Sie der Meinung sind, dass jemand den Vergleich manipulieren möchte. SHA1 ist besser als MD5. SHA256 ist wieder besser und sollte Ihnen völliges Vertrauen in Ihre spezielle Anwendung geben.
quelle
Die Dateien sind wahrscheinlich identisch, wenn ihre Hashes identisch sind. Sie können das Vertrauen erhöhen, indem Sie beide Dateien auf die gleiche Weise ändern (z. B. denselben Wert in dieselbe nicht verwendete Zelle einfügen) und dann die Hashes der geänderten Dateien vergleichen. Es ist schwierig, eine absichtliche Kollision für eine Datei zu erstellen, die auf eine im Voraus nicht bekannte Weise geändert wird.
quelle
Lassen Sie uns dies auf praktische Weise betrachten. Anstatt "die Hashes sind identisch" zu sagen, sage ich "Ich habe ein Computerprogramm geschrieben, das die Hashes von zwei Dateien berechnet und ausgibt, ob sie gleich sind oder nicht", und ich starte das Programm mit zwei Dateien "identisch". Dafür kann es mehrere Gründe geben:
Die Dateien können identisch sein. Mein Code enthält möglicherweise Fehler (in der Praxis wurden zwei lange (256 Byte) Hashes nicht mit memcmp, sondern mit strcmp verglichen): Der Vergleich gibt "dasselbe" zurück, wenn das erste Byte in jedem Hash Null ist und die Wahrscheinlichkeit für Dies ist 1 in 65536. Möglicherweise liegt ein Hardwarefehler vor (kosmische Strahlung trifft auf eine Speicherzelle und schaltet diese um). In seltenen Fällen liegen zwei verschiedene Dateien mit identischem Hash vor (eine Hash-Kollision).
Ich würde sagen, dass bei nicht identischen Dateien die mit Abstand wahrscheinlichste Ursache ein Programmierfehler ist, dann kommt der kosmische Strahl, der eine boolesche Variable mit dem Ergebnis eines Vergleichs der Hashes von "falsch" nach "wahr" geändert hat, und viel später das Zusammentreffen einer Hash-Kollision.
Es gibt Unternehmenssicherungssysteme, die es vermeiden, identische Dateien von 10.000 Benutzern zu sichern, indem jede Datei einem Hash unterzogen und nach einer Datei gesucht wird, in der bereits ein identischer Hash auf dem Server gespeichert ist. Im Falle einer Kollision wird eine Datei nicht gesichert, was möglicherweise zu Datenverlust führen kann. Jemand hat errechnet, dass es viel wahrscheinlicher ist, dass ein Meteorit Ihren Server trifft und alle Backups zerstört, als eine Datei zu verlieren, weil die Prüfsumme mit einer anderen Datei übereinstimmt.
quelle