Warum immer Fehler bei MD5

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.
Antworten
MalcolmYoung
User
Beiträge: 10
Registriert: Sonntag 24. Oktober 2010, 09:50

Warum bekomme ich hier:

Code: Alles auswählen

print(hashlib.md5("hallo"))
immer das:

Code: Alles auswählen

TypeError: Unicode-objects must be encoded before hashing
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Naja, die Fehlerbeschreibung ist doch fast selbsterklärend. Du benutzt Python 3.x, richtig?

Dort sind Strings Unicode-Objekte. hashlib kann aber nur mit Bytes umgehen. Also musst Du einfach den String encodieren:

Code: Alles auswählen

>>> text = "Hallo".encode("utf-8")
>>> type(text)
<class 'bytes'>
Dann sollte es klappen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
MalcolmYoung
User
Beiträge: 10
Registriert: Sonntag 24. Oktober 2010, 09:50

Ja, danke

aber jetzt hab ich folgendes als ausgabe:
<md5 HASH object @ 01D4BC00>


wie bekomm ich NUR den hashwert

Außerdem kann das gar nicht der hashwert sein
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Schaust Du auch mal in die Doku richtig rein? Da steht es doch:
http://docs.python.org/py3k/library/hashlib.html

Anscheinend kann man String-Literale auch direkt codiert als Bytes angeben - war mir neu, da ich bisher kaum mit Python gearbeitet habe.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
MalcolmYoung
User
Beiträge: 10
Registriert: Sonntag 24. Oktober 2010, 09:50

Hyperion hat geschrieben:Schaust Du auch mal in die Doku richtig rein? Da steht es doch:
http://docs.python.org/py3k/library/hashlib.html

Anscheinend kann man String-Literale auch direkt codiert als Bytes angeben - war mir neu, da ich bisher kaum mit Python gearbeitet habe.

Also normal versteh ich die Doku ja...

Aber da blick ich echt net durch???



:?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?:
Benutzeravatar
Jerry
User
Beiträge: 13
Registriert: Freitag 29. Oktober 2010, 15:00

Code: Alles auswählen

>>> import hashlib
>>> hashlib.md5(b'Im ersten Beispiel steht wie es funktioniert').digest()
b"\x90\x97'\x82\xd7\xbe\xae\xda\xfd)\xb4\x9ep\xc1\xf4\x92"
>>> hashlib.md5(b'Im zweiten Beispiel steht wie es funktioniert').hexdigest()
'90972782d7beaedafd29b49e70c1f492'
Gruß, Dennis
Nur weil ich paranoid bin, heisst das noch lange nicht, dass ich nicht verfolgt werde!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

MalcolmYoung hat geschrieben: Also normal versteh ich die Doku ja...

Aber da blick ich echt net durch???
Da kann ich nicht helfen - imho ist das große Beispiel alleine schon selbsterklärend... Jerry hat dieses letztlich nur leicht modifiziert hier gepostet. Das kann Dir folglich auch nicht helfen ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten