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.
Gast

Donnerstag 5. Januar 2006, 13:52

Wollte einmal kurz fragen, wie ich den Hashwert einer Datei ermitteln kann?
hab keinen speziellen algo im auge, mir ist nur wichtig eine zeichenkette zu erhalten, die eine datei genau identifiziert

moderiert von blackbird: verschoben ;-/
Gast

Donnerstag 5. Januar 2006, 13:52

ich bins nochmal^^
das ganze sollte in python geschrieben sein^^
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 5. Januar 2006, 15:49

Anonymous hat geschrieben:mir ist nur wichtig eine zeichenkette zu erhalten, die eine datei genau identifiziert
Hi!

Suche in der Hilfe nach "sha".

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 5. Januar 2006, 16:47

Wenn es auch eine MD5 Checksum sein kann, dann schau mal hier: http://www.jensdiemer.de/Programmieren/ ... ets/md5sum

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Donnerstag 5. Januar 2006, 17:17

Anonymous hat geschrieben:eine zeichenkette zu erhalten, die eine datei genau identifiziert
Genau aka 100% geht das natürlich nicht, ansonsten hättest du ja eine geniale Kompression ;)
BlackJack

Donnerstag 5. Januar 2006, 22:50

Streng genommen liefert der folgende Schnipsel eine Zeichenkette, welche die Datei genau identifiziert: :twisted:

Code: Alles auswählen

fileobj = open('dateiname', 'rb')
id_str = fileobj.read()
fileobj.close()
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Freitag 13. Januar 2006, 16:48

Das ist aber uneffektiv! Viel besser ist:

Code: Alles auswählen

id_str = bz2.compress(fileobj.read())
:-P
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Freitag 13. Januar 2006, 17:39

Joghurt hat geschrieben:Das ist aber uneffektiv! Viel besser ist:

Code: Alles auswählen

id_str = bz2.compress(fileobj.read())
:-P
Ich weis nicht. Kommt auf die definition von effektiv an. Wenns um Geschwindigkeit geht, dann ist das alles andere, als effektiv.
BlackJack

Freitag 13. Januar 2006, 23:42

ProgChild hat geschrieben:
Joghurt hat geschrieben:Das ist aber uneffektiv! Viel besser ist:

Code: Alles auswählen

id_str = bz2.compress(fileobj.read())
:-P
Ich weis nicht. Kommt auf die definition von effektiv an. Wenns um Geschwindigkeit geht, dann ist das alles andere, als effektiv.
Effektiv hat mit Geschwindigkeit nix zu tun. Effektiv ist etwas, wenn es den gewünschten Effekt hat, und das haben beide Varianten. Du verwechselst das wahrscheinlich gerade mit effizient. Da kommt's dann in der Tat darauf an, ob man mehr Wert auf Geschwindigkeit oder mehr Wert auf Speicherplatzverbrauch legt
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Samstag 14. Januar 2006, 10:27

BlackJack hat geschrieben:Effektiv hat mit Geschwindigkeit nix zu tun. Effektiv ist etwas, wenn es den gewünschten Effekt hat, und das haben beide Varianten. Du verwechselst das wahrscheinlich gerade mit effizient. Da kommt's dann in der Tat darauf an, ob man mehr Wert auf Geschwindigkeit oder mehr Wert auf Speicherplatzverbrauch legt
Effektivität hat auch was mit Geschwindigkeit zu tun. Wenn du zum Beispiel nur 5sec Zeit hast, den String zu ermitteln, dann kann das mit bz2 schon mal hackelig werden, denn du ermittelst in den meisten Fällen weniger von der Gestamten Information, als du ohne bz2 ermitteln würdest. Die Daten zu komprimieren, wäre also weniger effektiv, als es zu lassen.

Effektivität ist ein sehr relativer Begriff.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 14. Januar 2006, 18:26

ProgChild hat geschrieben:Effektivität ist ein sehr relativer Begriff.
Nach der Lektür der Wikipedia-Artikel zu Effektivität und Effizienz würde ich BlackJack spontan recht geben. In dem Fall haben wir aber alle Zeit der Welt, nicht nur 5 Sekunden, deswegen sind beide Varianten genauso Effektiv. BlackJacks Variante ist halt effizienter was die Zeit betrifft, Joghurts Variante ist effizienter was den Speicherbedarf angeht.

Wenn wir null Nanosekunden Zeit hätten, dann wären beide Varianten uneffektiv, aber es ging hier ja nie um Zeit sondern nur um Hashwert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Dienstag 17. Januar 2006, 00:20

Alle md5sum Code-Snippets, die mir bislang über den Weg gelaufen sind, hatten eine Variable "bufsize". Eine Datei wird immer schrittweise (Schrittweite ist "bufsize" in Bytes) eingelesen und der md5-Wert wird zum vorherigen quasi "drauf-addiert".

Warum macht man das schrittweise und nicht mit einem Mal? Was kann bei großen Dateien passieren? Wie hoch sollte man den Puffer wählen?
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dienstag 17. Januar 2006, 01:34

Bei großen Dateien berechnet er die md5-Summe genauso, außer dass es durchaus passieren kann dass die Datei im schlimmsten Fall nicht in Deinen Speicher passt oder (im weniger schlimmen Fall) der Rechner anfängt zu swappen. Denk dran dass Du zum Beispiel eine md5-Summe eines DVD-isos berechnen willst, und ich bin mir sicher, dass mein Computer die Datei nicht im Speicher inkl. Swap halten kann.

Sonst, bufsize darfst Du im Prinzip so groß wählen wie Du willst; wenn Du die Datei auf einmal liest ist da ja nix anderes als wenn Du bufsize=<Dateigröße> setzen würdest. Immer mit dem Hinweis auf Speicher-/Laufzeit-Effizienz (also je größer bufsize desto schneller die Berechnung bis swap-grenze erreicht denn dann wieder viel viel langsamer; je kleiner bufsize desto sparsamer bei der Speichernutzung).

--- Heiko.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 17. Januar 2006, 07:35

Ach, und wie ich das verstehe, ist die resultierende MD5 nicht von der bufsize Größe abhängig... Es kommt immer die selbe raus... IMHO

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dienstag 17. Januar 2006, 10:45

Ach, und wie ich das verstehe, ist die resultierende MD5 nicht von der bufsize Größe abhängig... Es kommt immer die selbe raus... IMHO
Das wäre besser so wenn die Python MD5-Implementierung korrekt ist, ja. ;-)

--- Heiko.
Antworten