2009-08-14 7 views
1

Byte für Byte funktioniert sicher. Aber ich frage mich, ob es andere bewährte Art und Weise gibt, sagen Sie eine Art von Hashing, die eindeutige Werte für jede Datei ausgibt. Und wenn es welche gibt, was sind die Vor- und Nachteile eines jeden hinsichtlich Zeit und Speicherbedarf?Was sind die anderen Möglichkeiten zu bestimmen, dass zwei Dateiinhalte identisch sind, mit Ausnahme der Byte-für-Byte-Prüfung?

Übrigens habe ich diesen vorherigen Thread What is the fastest way to check if files are identical? gefunden. Allerdings geht es bei meiner Frage nicht um Geschwindigkeit, sondern um Alternativen.

Bitte beraten. Vielen Dank.

+1

Bit-für-Bit-Prüfung. – Randell

+0

... oder Wort-für-Wort-Überprüfung – redtuna

Antwort

3

Die einzige bewährte Methode besteht darin, einen byteweisen Vergleich durchzuführen. Es ist auch der schnellste Weg und Sie können die Speicherbelegung bis auf 2 Bytes reduzieren, wenn Sie ein Byte auf einmal lesen. Das Lesen größerer Stücke gleichzeitig ist für die Leistung jedoch vorteilhaft.

Hashing wird auch funktionieren. Aufgrund des Schubladendenkenprinzips besteht eine geringe Wahrscheinlichkeit, dass Sie falsch positive Ergebnisse erhalten, aber in jeder Hinsicht ist es vernachlässigbar, wenn Sie einen sicheren Hash wie SHA verwenden. Die Speicherauslastung ist ebenfalls gering, aber die Leistung ist geringer als der Byte-für-Byte-Vergleich, da Sie den Hash-Aufwand haben. Es sei denn, Sie können die Hashes für mehrere Vergleiche wiederverwenden.

+1

Insbesondere, wenn Sie die Wahrscheinlichkeit einer falschen Übereinstimmung deutlich unter der Wahrscheinlichkeit eines kosmischen Strahls, der ein Bit im RAM umkehrt und eine falsche Übereinstimmung für den Byte-für-Byte-Vergleich verursacht, erhalten, können Sie sich keine Sorgen mehr darüber machen. Das echte Risiko besteht nicht darin, dass Ihr Hash-Code zerbrochen wurde und jemand böswillig Hash-Kollisionen in Ihren Datensatz einführt. Also verwenden Sie MD5 definitiv nicht als Hash, und im Hinblick auf die nahe Zukunft, verwenden Sie auch nicht SHA-1. –

+0

Kennen Sie irgendwelche Schätzungen für die Wahrscheinlichkeit der kosmischen Strahlung? Ich stelle mir vor, dass es nur eine relativ kleine Anzahl von Bitstellen gibt, die diesen Effekt haben würden, was ein entsprechend kleines Ziel für den kosmischen Strahl darstellt. – caf

+0

Entschuldigung, nein, ich gestehe, ich benutze es als Übertreibung, der Punkt ist, dass es keine Notwendigkeit gibt, zu verlangen, dass Software viele, viele Größenordnungen zuverlässiger als Hardware ist. Angenommen, die Wahrscheinlichkeit, dass ein Hardwareprovozierter Fehler irgendwo in den nächsten 1000 Jahren an irgendeinem Computer auftritt, ist größer als 1%. Ich denke, das ist sehr großzügig zu Hardware. Sagen Sie 10^12 Computer für 1000 Jahre, erfordert eine Wahrscheinlichkeit von mindestens 1 in 2^91 pro ms einer Fehlberechnung. Ich denke, Intel würde sich damit zufrieden geben, und die Wahrscheinlichkeit, dass ein Paar auf einem 160-Bit-Hash kollidiert, ist natürlich viel geringer. –

2

Wie auch immer, wenn Ihre Dateien n Bytes lang sind, müssen Sie n Bytes vergleichen, Sie können das Problem nicht einfacher machen.

Sie können Geschwindigkeit nur bei n Vergleichen erhöhen, wenn Dateien nicht identisch sind, indem Sie beispielsweise die Länge überprüfen.

Ein Hash ist keine bewährte Methode wegen Kollisionen, und um einen Hash zu machen, müssen Sie auch n Bytes auf jeder Datei lesen.

Wenn Sie die gleiche Datei mehrmals vergleichen Sie Hashing verwenden können, dann überprüfen Sie mit einem Byte-zu-Byte-

1

Hashing nicht ausgibt ‚einzigartig‘ Werte. Dies kann unmöglich sein, weil es unendlich viele verschiedene Dateien gibt, aber nur eine endliche Anzahl von Hash-Werten. Es braucht nicht viel zu denken, um zu realisieren, dass absolut sicher zwei Dateien sind die gleichen, Sie werden alle Bytes von beiden untersuchen müssen.

Hashes und Prüfsummen können schnell liefern ‚diese Dateien sind verschiedene‘ Antwort, und innerhalb bestimmter probabilistischen Grenzen kann eine schnelle bieten ‚diese Dateien sind wahrscheinlich die gleiche‘ Antwort, aber für Sicherheit der Gleichheit haben Sie jeden überprüfen Byte. Wie könnte es einen Weg geben?

+0

Downvoters lassen Sie bitte einen erläuternden Kommentar. – AakashM

0

Wenn Sie mehrere Dateien vergleichen möchten, dann SHA-1 Hash-Algorithmus ist eine sehr gute Wahl.

Verwandte Themen