[Python-de] Problem mit md5

Torsten Rudolph run120895 at gmx.net
Don Aug 18 08:00:09 CEST 2005


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 at python.net
> http://python.net/mailman/listinfo/python-de


-- 
Registered-Linux-User: #338573 (http://counter.li.org)