![](https://secure.gravatar.com/avatar/e88b046bd99c34714b60a04eaf51d334.jpg?s=120&d=mm&r=g)
Am Mittwoch, 17. August 2005 11:08 schrieb Torsten Rudolph:
Der folgende Code erzeugt mir genau das erwartete Ergebniss.
m = md5.new() m.update('\206password\370\342\211\150\252\301\046\322\354\040\063\243\024\ 102\336\233') hashpassword = m.hexdigest()
Wenn ich mir das Passwort allerdings dynamisch über folgenden Code erzeugen will, bekomme ich ein anderes Ergebniss. Wieso? Und wie kann ich das ändern?
regex = re.compile('MD5')
for line in open(filename): result = regex.search(line) if result: extra1 = string.split(line, "'")[1] extra2 = string.split(line, "'")[3]
# hier einfuegen: extra1 = extra1.decode("string-escape") extra2 = extra2.decode("string-escape")
password = extra1 + 'password' + extra2
m = md5.new() m.update(password) hashpassword = m.hexdigest()
PS: Im obrigen Code gibt print line gibt folgendes aus:
(ich vermute, dass das im Original alles in einer Zeile steht)
document.sendin.password.value = hexMD5('\206' + document.login.password.value + '\370\342\211\150\252\301\046\322\354\040\063\243\024\102\336\233');
Dein Grundproblem ist, dass z. B. \206, wenn es aus einer Datei gelesen wird, ein String aus vier Zeichen/Bytes ist, während es im Python-Quelltext genau ein Zeichen darstellt:
len("\206") 1
Verschiedene Darstellungen desselben Zeichens/Bytes:
chr(int("206", 8)) == chr(134) == "\x86" == "\206" True
Die einfachste Methode, um aus der Zeichenkette \206 wieder das einzelne Byte zu gewinnen ist decode():
"\\206".decode("string-escape") '\x86'
Kleinigkeiten: - viele Funktionen aus dem string-Modul sind veraltet. Statt string.split(s, delim) schreibst Du besser s.split(delim). - Für Deine Zwecke sollte ein einfacher Test anstelle der regex ausreichen: if "MD5" in line: # ... Dass der gesamte Code nicht sonderlich robust ist, ist Dir hoffentlich klar... Peter _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de