Checksum
Moderator: Moderatoren
Checksum
Wie ist es möglch festzustellen ob zwei Dateien mit unterschiedliche Namen doch identisch sind ?
Ich denke zuerst an xppCrypt lin in XBASE aber dann muss der Datei gelesen werden und danach ein SHA-256 oder MD5 berechnen.
Aber ein 200 MB Datei wird nur langsam berechnet,
Es muss einen besseren Weg geben -
Ein MD5 kann so aussehen
944a1e869969dd8a4b64ca5e6ebc209a
Wie wahrscheinlich ist es das zwei gleiche MD5 checksums
von absolut identische dateien kommen ?
Wenn in XBASE keinen Ausweg gibt, ist vielleicht so einen GNU Datei die Lösung?
http://sourceforge.net/projects/md5summer/
Gruss
Bengt
Ich denke zuerst an xppCrypt lin in XBASE aber dann muss der Datei gelesen werden und danach ein SHA-256 oder MD5 berechnen.
Aber ein 200 MB Datei wird nur langsam berechnet,
Es muss einen besseren Weg geben -
Ein MD5 kann so aussehen
944a1e869969dd8a4b64ca5e6ebc209a
Wie wahrscheinlich ist es das zwei gleiche MD5 checksums
von absolut identische dateien kommen ?
Wenn in XBASE keinen Ausweg gibt, ist vielleicht so einen GNU Datei die Lösung?
http://sourceforge.net/projects/md5summer/
Gruss
Bengt
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2823
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 95 Mal
- Danksagung erhalten: 13 Mal
Re: Checksum
Es gilt generell die Regel, dass zwei Dateien mit gleicher Grösse und gleichem MD5-Hash identisch sind.
Wobei man nun darüber streiten kann, was schneller ist: zwei Datein byteweise vergleichen, oder für zwei Dateien den MD5-Hash berechnen.
Wobei man nun darüber streiten kann, was schneller ist: zwei Datein byteweise vergleichen, oder für zwei Dateien den MD5-Hash berechnen.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- AUGE_OHR
- Marvin
- Beiträge: 12903
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 44 Mal
Re: Checksum
BenOve hat geschrieben:Wie ist es möglch festzustellen ob zwei Dateien mit unterschiedliche Namen doch identisch sind ?
Code: Alles auswählen
IF a = b
mit dem lesen des Files hast du Recht aber warum berechnen ?BenOve hat geschrieben:Ich denke zuerst an xppCrypt lin in XBASE aber dann muss der Datei gelesen werden und danach ein SHA-256 oder MD5 berechnen.
die "Berechnung" a = b ist deutlich schneller als das lesen von 2 350MB grossen Dateien.BenOve hat geschrieben:Aber ein 200 MB Datei wird nur langsam berechnet,
Es muss einen besseren Weg geben -
Code: Alles auswählen
#include "os.ch"
PROCEDURE MAIN(cDatei1,cDatei2)
LOCAL a := ""
LOCAL b := ""
LOCAL nStart
LOCAL nStop
IF FILE(cDatei1) .AND. FILE(cDatei2)
? Memory(MEM_VIRT_AVAIL)
? Memory(MEM_VIRT_TOTAL)
? Memory(MEM_RAM_AVAIL)
? "--------"
nStart := SECONDS()
a:= MEMOREAD(cDatei1)
? nStop := SECONDS() - nStart
? "--------"
? Memory(MEM_VIRT_AVAIL)
? Memory(MEM_VIRT_TOTAL)
? Memory(MEM_RAM_AVAIL)
? "--------"
nStart := SECONDS()
b:= MEMOREAD(cDatei2)
? nStop := SECONDS() - nStart
? "--------"
? Memory(MEM_VIRT_AVAIL)
? Memory(MEM_VIRT_TOTAL)
? Memory(MEM_RAM_AVAIL)
? "--------"
nStart := SECONDS()
IF a = b
? "JA"
ELSE
? "NEIN"
ENDIF
? nStop := SECONDS() - nStart
? "--------"
WAIT
ELSE
ALERT("compare files <cDatei1> or <cDatei2> not found")
ENDIF
RETURN
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15688
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Checksum
Der direkte Vergleich geht nur bei kleineren Dateien (max 500 MB je nach eigenem Speicher)
Ein MD5 hash ist von der Dateigröße nicht beschränkt auf den Hauptspeicher UND wenn man diesen abspeichert kann man später prüfen ob die Datei geändert wurde.
Ein MD5 hash ist von der Dateigröße nicht beschränkt auf den Hauptspeicher UND wenn man diesen abspeichert kann man später prüfen ob die Datei geändert wurde.
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15688
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Checksum
Die 2 GB Grenze gilt nur für DBFs, mit FOPEN() etc. kann man größere Dateien verarbeiten, aber externe MD5 Programme sind viel schneller.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12903
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 44 Mal
Re: Checksum
wie ich sagte : das "lesen" von 2 x 500MB dauert länger als das "berechnen" von irgendetwas ...
Xbase++ kann als 32bit Programm nur 2GB "verwalten" ... egal ob DBF oder RAM.
klar könnte man den MD5 "vorher" berechnen ... oder es "an" das File "anhängen" und man vergleicht nur den Teil.
Xbase++ kann als 32bit Programm nur 2GB "verwalten" ... egal ob DBF oder RAM.
klar könnte man den MD5 "vorher" berechnen ... oder es "an" das File "anhängen" und man vergleicht nur den Teil.
gruss by OHR
Jimmy
Jimmy
Re: Checksum
Das verstehe ich nicht.AUGE_OHR hat geschrieben:wie ich sagte : das "lesen" von 2 x 500MB dauert länger als das "berechnen" von irgendetwas ...
Wenn in der Berechnung der gesamte Inhalt der beiden grossen Files einbezogen wird - dann ist es doch Lesen + Berechnen und das müsste länger dauern?
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2823
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 95 Mal
- Danksagung erhalten: 13 Mal
Re: Checksum
Wenn wir über Assembler reden würden, wäre Lesen+Vergleichen wohl schneller als Lesen+Berechnen. Aber Xbase++ ist ja interpretierter Code (wenn auch schnell interpretierter Code), daher müsste man einen entsprechenden Vergleich durchführen, um festzustellen, was schneller geht. Es ist möglich, dass ein externes Programm schneller ist als die interne Berechnung.
Allerdings geht's auch einfacher: wenn exakt gleich grosse Dateien die Ausnahme sind, reicht ein Grössenvergleich über die directory() Funktion. Erst wenn zwei Dateien exakt gleich gross sind, muss ein Vergleich oder ein MD5-Hash für beide Dateien her.
Allerdings geht's auch einfacher: wenn exakt gleich grosse Dateien die Ausnahme sind, reicht ein Grössenvergleich über die directory() Funktion. Erst wenn zwei Dateien exakt gleich gross sind, muss ein Vergleich oder ein MD5-Hash für beide Dateien her.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- AUGE_OHR
- Marvin
- Beiträge: 12903
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 44 Mal
Re: Checksum
ich meine das physikalische "lesen" der Daten von SSD / HDD gegenüber einer Berechnung einer Checksumme selbst wie man am Beispiel ausprobieren kann.Wonderer hat geschrieben:Das verstehe ich nicht.AUGE_OHR hat geschrieben:wie ich sagte : das "lesen" von 2 x 500MB dauert länger als das "berechnen" von irgendetwas ...
Wenn in der Berechnung der gesamte Inhalt der beiden grossen Files einbezogen wird - dann ist es doch Lesen + Berechnen und das müsste länger dauern?
MD5 hat IMHO nur Sinn wenn man es vorher berechnet so das man die Checksumme nachträglich zum vergleichen nutzen kann.
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12903
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 44 Mal
Re: Checksum
ich meine das physikalische "lesen" der Daten von SSD / HDD gegenüber der Berechnung einer Checksumme selbst wie man am Beispiel ausprobieren kann.Wonderer hat geschrieben:Das verstehe ich nicht.AUGE_OHR hat geschrieben:wie ich sagte : das "lesen" von 2 x 500MB dauert länger als das "berechnen" von irgendetwas ...
Wenn in der Berechnung der gesamte Inhalt der beiden grossen Files einbezogen wird - dann ist es doch Lesen + Berechnen und das müsste länger dauern?
MD5 hat IMHO nur Sinn wenn man es vorher berechnet so das man die Checksumme nachträglich zum vergleichen nutzen kann.
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15688
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Checksum
Das Problem ist die Stringverwaltung die mit dem Hauptspeicher auskommen muss, ob Xbase++ mehr als 2 GM RAM verwalten kann weiß ich nicht (möglich wären 3 GM mit einem Flag),Wonderer hat geschrieben:Das verstehe ich nicht.AUGE_OHR hat geschrieben:wie ich sagte : das "lesen" von 2 x 500MB dauert länger als das "berechnen" von irgendetwas ...
Wenn in der Berechnung der gesamte Inhalt der beiden grossen Files einbezogen wird - dann ist es doch Lesen + Berechnen und das müsste länger dauern?
aber für die Speicherverwaltung sind so große Strings im Hauptspeicher einfach tötlich (bis 300 MB hatte ich nie Probleme).
Wenn man dann 2 so große vergleichen will und noch andere Operationen eventuell Kopieen anlegen wird die Speicherverwaltung von Xbase stark gestreßt.
Falls nun im System keine 8 GB Hauptspeicher stecken muss auch noch ausgelagert werden ... richtig übel
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2823
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 95 Mal
- Danksagung erhalten: 13 Mal
Re: Checksum
Man kann natürlich hingehen und über fopen(), fread() jeweils passende Häppchen zu lesen und zu vergleichen. Dann bleibt man selbst bei TB-Dateien unter der kritischen Grenze.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.