Hashwert einer Datei ermitteln?!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Na klar, die md5 Summe sollte auch immer gleich sein :-)

Also gibt es keine "Regel", wie groß man den Puffer wählen sollte. Letztlich wird sowieso Schritt für Schritt die gesamte Datei eingelesen.

Gibt es noch andere sichere Methoden, um festzustellen, ob sich eine Datei verändert hat (außer Datum und Dateigröße)?

Das Auffinden von Dateien mittels eines Hash-Wertes ist übrigens in den USA patentrechtlich geschützt... dass man sowas schützen kann :-(
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Gibt es noch andere sichere Methoden, um festzustellen, ob sich eine Datei verändert hat (außer Datum und Dateigröße)?
Im Prinzip nicht wirklich, denn die einzige Möglichkeit wirklich zu prüfen ob sich eine Datei geändert hat wäre mittels eines Change-Notifiers vom Betriebssystem (ala fam, dnotify).

Aber selbst eine MD5-Summe ist keine Garantie dafür dass sich in einer Datei nichts verändert hat: da ein vielfach größeres Objekt auf den Bereich 0...2**128-1 abgebildet wird muß es zwangsläufig Kollisionen geben.

Dass MD5 (aus der Gruppe der brauchbaren Einwegfunktionen) so aufgebaut ist dass diese Kollisionen eben wenig wahrscheinlich sind ist klar, man kann sich also guten gewissens drauf verlassen dass die Datei gleichgeblieben ist wenn die MD5-Summe gleich geblieben ist. Aber eben nicht 100%-ig. ;-)

--- Heiko.
Zuletzt geändert von modelnine am Dienstag 17. Januar 2006, 11:06, insgesamt 2-mal geändert.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Ja habe mich wegen md5 Kollisionen belesen. Also die Wahrscheinlichkeit einer Kollision ist echt so gering, dass man sich schon auf eine md5 Summe verlassen kann.

Unter dem Sicherheitsaspekt wäre md5 mittlerweile zu überdenken, da der Typ, der bereits md4 geknackt hat, gerade dabei ist, dasselbe für md5 zu machen... aber es ist wohl auf jeden Fall schonmal schwieriger :wink:

--

Was war das mit dem Change-Notifier? Klingt auch interessant, weil eine md5 Summe echt ewig dauern kann, wenn man ein ganzes Verzeichnis oder Laufwerk auf Änderungen prüfen will. War das nur ein Ansatz oder könnte man tatsächlich mit Python diese Change-Notifier auslesen... ist ja sicher vom Betriebssystem abhängig -> Vorteile/Nachteile?
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Zumindest unter Linux kenn ich:

http://pyinotify.sourceforge.net/ (ab Kernel >= 2.6.13, inotify)

und für Linux und SGI:

http://python-fam.sourceforge.net/ (mit installiertem famd und vorzugsweise auch dnotify)

Was Du im Prinzip bekommst ist dass Dein Programm ein Callback registrieren kann wenn bestimmte Operationen im Dateisystem passieren. Das kann zum Beispiel sein dass eine Datei zum Schreiben geöffnet wird, ein Verzeichnis sich geändert hat, etc.

Du wirst dann mittels eines callbacks davon benachrichtigt, dass diese Veränderung passiert ist, und kannst dann eingreifen.

Unter Windows gibt es im Win32-API etwas ähnliches, frag mich jedoch nicht wie man das anspricht (was ja mittels ctypes und pywin32 eigentlich nie ein Problem ist) oder ob es dafür auch einen Pythonischen Wrapper gibt.

--- Heiko.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Wie ist MD5 in Python implementiert? Ich finde kein Python-Modul im Verzeichnis "Lib" (Windows). Und auch nicht in einem anderen Unterverzeichnis, da liegen höchstens ein paar Tests und Beispiele zur Anwendung.

Ist der MD5-Algorithmus direkt "fest eingebaut", also evtl. sogar als C-Programm?

Habe gestern rekursiv mein komplettes Laufwerk "C:" durchlaufen lassen und dabei für jede einzelne Datei einen MD5-Hash erstellen lassen. Nach 17 Minuten war Python fertig. Es handelte sich um über 10,3 GB und einige 50.000 Dateien.

Ist das nun schnell oder langsam :D ???
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Der MD5-Algorithmus ist fest eingebaut als C-Extension. Unter Windows hab ich keine Ahnung wo die liegen, unter Unix im Normalfall in:

/usr/lib/python2.4/lib-dynload

als .so, also shared object. Der MD5-Algorithmus gibt das GIL soweit ich weiß nicht ab; bringt also keinen Vorteil wenn man mehrere Threads aufmacht um in Python MD5-Summen parallel zu berechnen (ganz egal wie groß man die blocksize macht, es wird immer nur eine MD5-Summe gleichzeitig berechnet).

Wen der Quellcode interessiert:

http://svn.python.org/view/python/trunk ... iew=markup

--- Heiko.
Antworten