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?
Dateien vergleichen
- xXRobo_CubeXx
- Beiträge: 120
- Registriert: 12.06.2015 16:08
- Computerausstattung: Version 5.41 LTS
- Wohnort: Wohnort
- Kontaktdaten:
Dateien vergleichen
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?
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?
Version 5.41 LTS 
Re: Dateien vergleichen
Du kannst die Dateien z.B. mit MD5 vergleichen: MD5FileFingerprint()
Wenn du irgendwann auf eine neuere Version umsteigst, dann: FileFingerprint() und #PB_Cipher_MD5
Wenn du irgendwann auf eine neuere Version umsteigst, dann: FileFingerprint() und #PB_Cipher_MD5
- NicTheQuick
- Ein Admin
- Beiträge: 8838
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Dateien vergleichen
MD5 ist schnell, hat aber viele Kollisionen. SHA256 oder höher ist zu bevorzugen.
- xXRobo_CubeXx
- Beiträge: 120
- Registriert: 12.06.2015 16:08
- Computerausstattung: Version 5.41 LTS
- Wohnort: Wohnort
- Kontaktdaten:
Re: Dateien vergleichen
Warum gib es Kollisionen? Was passiert genau beim kollidieren? Explodieren die Dateien wie bei Cobra 11?
Was heisst das und wann kann das auftreten? 
Version 5.41 LTS 
- NicTheQuick
- Ein Admin
- Beiträge: 8838
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Dateien vergleichen
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. 
Hier ein Beispiel einer Kollision von MD5: Collisions in the MD5 cryptographic hash function
Hier ein Beispiel einer Kollision von MD5: Collisions in the MD5 cryptographic hash function
- xXRobo_CubeXx
- Beiträge: 120
- Registriert: 12.06.2015 16:08
- Computerausstattung: Version 5.41 LTS
- Wohnort: Wohnort
- Kontaktdaten:
Re: Dateien vergleichen
thx für die super hammer geile tolle Erklärung sehr verständlich

Version 5.41 LTS 
Re: Dateien vergleichen
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.
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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!

