Seite 1 von 1

Dateien vergleichen

Verfasst: 21.04.2016 15:00
von xXRobo_CubeXx
Hi :)
Ich hab zwei Dateien die gleich oder unterschiedlich sein können und das möchte ich prüfen ob indentisch oder nicht. Nur wie mache ich das am besten ? Beide Dateien komplett in Strings laden und beide Strings vergleichen?

Re: Dateien vergleichen

Verfasst: 21.04.2016 15:05
von RSBasic
Du kannst die Dateien z.B. mit MD5 vergleichen: MD5FileFingerprint()
Wenn du irgendwann auf eine neuere Version umsteigst, dann: FileFingerprint() und #PB_Cipher_MD5

Re: Dateien vergleichen

Verfasst: 21.04.2016 15:43
von NicTheQuick
MD5 ist schnell, hat aber viele Kollisionen. SHA256 oder höher ist zu bevorzugen.

Re: Dateien vergleichen

Verfasst: 21.04.2016 16:16
von xXRobo_CubeXx
Warum gib es Kollisionen? Was passiert genau beim kollidieren? Explodieren die Dateien wie bei Cobra 11? :D :D :D Was heisst das und wann kann das auftreten? :)

Re: Dateien vergleichen

Verfasst: 21.04.2016 16:30
von NicTheQuick
Wenn du eine Prüfsumme erstellst, wird mittels eines bestimmten Verfahrens (MD5, SHA-1, SHA-2, ...) aus einer beliebig großen Datenmenge ein immer gleich langer Schlüssel (Prüfsumme) erzeugt. Bei MD5 sind es 32 hexadezimale Ziffern, das heißt 128 Bit Daten. Wenn du jetzt die MD5-Prüfsumme von einer Datei der Größe 1 GB erstellst, werden 8 GBit Daten auf 128 Bit abgebildet. Mit Prüfsummen versucht man nun große Daten auf kleine abzubilden, weil man sie so leichter vergleichen kann. Allerdings kann es natürlich zu Kollisionen kommen, d. h. verschiedene Eingangsdaten können die selbe Prüfsumme ergeben. Das erscheint logisch, da man aus der Prüfsumme, die ja nur 128 Bit lang ist, nie und nimmer die 1 GBit eindeutig rekonstruieren kann. Wäre das der Fall, wäre das ein super Packalgorithmus. :D

Hier ein Beispiel einer Kollision von MD5: Collisions in the MD5 cryptographic hash function

Re: Dateien vergleichen

Verfasst: 21.04.2016 16:46
von xXRobo_CubeXx
thx für die super hammer geile tolle Erklärung sehr verständlich :allright: :)

Re: Dateien vergleichen

Verfasst: 21.04.2016 18:49
von GPI
Schlussfolgerung daraus: Lies sie blockweise ein und vergleich sie. Selbst wenn der MD5 gleich ist, kannst du nie sicher sein, das die Dateien wirklich gleich sind. So eine Checksum/Prüfsumme ist nur praktisch, wenn du wirklich viele gleich große Dateien hast und wissen willst, welche theoretisch gleich sein könnten. Mittels der Summen kannst du dann eine Vorauswahl treffen.

In Strings laden ist eine schlechte Idee, da die bei einen null-byte enden können. Ich würde zwei Speicher reservieren (bspw. 10 MB), die Daten aus den beiden Dateien in die Blöcke laden (readdata) - in 10 MB schritten halt und dann jeden Schritt mit MemoryCompare vergleichen.