Hallo Liste, 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] password = extra1 + 'password' + extra2 m = md5.new() m.update(password) hashpassword = m.hexdigest() PS: Im obrigen Code gibt print line gibt folgendes aus: 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'); -- Registered-Linux-User: #338573 (http://counter.li.org) _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
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
Peter Otten schrieb:
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")
Habe ich gemacht. Funktioniert wunderbar.
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:
Wieder was gelernt!
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: # ...
Habe ich sofort ersetzt.
Dass der gesamte Code nicht sonderlich robust ist, ist Dir hoffentlich klar...
Was meinst du mit nicht sonderlich robust? Wenn du die nicht vorhandenen Fehlerprüfungen meinst, so kann ich dich beruhigen, ist nur zum Testen der Code. Würde das sonst natürlich machen. Ist ja eh immer die meiste Arbeit.
Peter
MfG Torsten
------------------------------------------------------------------------
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
-- Registered-Linux-User: #338573 (http://counter.li.org) _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (2)
-
Peter Otten
-
Torsten Rudolph