Ich hab das Problem, das meine PyLucid Passwörter offensichtlich nicht Plattformunabhängig sind http://pylucid.net/trac/ticket/30
Erste Vermutung: hash() liefert unterschiedliche Werte (Python 2.2 <-> Python 2.3)
An hash() liegt es aber wohl nicht, da ich ja mittlerweile md5() nutzte und der sollte IMHO immer den selben Wert liefern...
Nun vermute ich, das es an random.Random() liegt. Kann es sein, das es mit dem gleichen seed unterschiedliche Werte bei unterschiedlichen Plattformen bzw Python Versionen liefert?
random.Random() liefert unterschiedliche Ausgaben???
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Wie immer ist Dokumentation lesen aufschlussreich: http://docs.python.org/lib/module-random.html, 7. Absatz.
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Genau. Der Wichmann-Hill-Generator ist allerdings immernoch im random-Modul, als random.WichmannHill.
Wenn du also diese Klasse direkt instanzierst, hast du immer den gleichen Generator.
Wenn du also diese Klasse direkt instanzierst, hast du immer den gleichen Generator.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Sorry (CNR), aber der Namen dieses Threads erinnert mich etwas an Coded Smorgasbord: Prepare For Return, an diesen Absatz:
Daily WTF hat geschrieben:hi all,
IntTemp = Int((255 * Rnd()) + 1)
I used above ASP.NET code. Problem is in " Rnd() "
Rnd() value is changing everytime.
What is the alternative for Rnd()?
OR How will stop Rnd() value changes at everytime?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Ich blicke langsam nicht mehr durch Keine Ahnung ob im crypt Modul noch ein Fehler ist oder nicht. Also ob auf unterschiedlichen Rechnern, unterschiedliche Passwörter raus kommen.
Keine Ahnung ob das hash() Problem wirklich existierte oder nicht.
Ich hab extra mal ein Plugin für PyLucid geschrieben: EvilEval Damit kann man Python Code direkt online ausführen. (Oder auch Kommandos auf der shell)
Hab diesen Code auf drei verschiedenen Rechnern Probiert:
Liefert bei mir immer die selben Daten:
Von daher weiß ich nicht, ob es überhaupt ein Problem gibt!
OK durch die Änderung im Random Modul dürften zumindest Passwörter zwischen Python 2.2 und 2.3 "defekt" werden, aber das solle nun nicht mehr so dolle stören...
Ich lasse es jetzt erstmal so und bei der nächsten PyLucid Release wird da nochmal angepackt:
Zum einen kommt ein neuer Crypt Algo ran
Zum anderen gibt es dann hoffentlich den User-Pass-Recovery und im schlimmsten Fall müßen sich die User halt ein neues Passwort erstellen.
Keine Ahnung ob das hash() Problem wirklich existierte oder nicht.
Ich hab extra mal ein Plugin für PyLucid geschrieben: EvilEval Damit kann man Python Code direkt online ausführen. (Oder auch Kommandos auf der shell)
Hab diesen Code auf drei verschiedenen Rechnern Probiert:
Code: Alles auswählen
from PyLucid.system import crypt
key = "TestKey"
msg = "Das ist ein dummer Text"
encrypted = crypt.encrypt(msg, key)
print encrypted, hash(encrypted)
print crypt.decrypt(encrypted, key)
print "-"*79
crypt.__test_old_decrypt__()
Das Ergebnis ist überall das selbe!yVljhgh0UwKKz2GMUTs5BSE5Mns0Zlo1HDx5Fid7FXIAKmEPOG1a -734220794
Das ist ein dummer Text
-------------------------------------------------------------------------------
__________________________________________________________________
old decrypt implementation test:
Test Data ok: True
encrypt test: True
Von daher weiß ich nicht, ob es überhaupt ein Problem gibt!
OK durch die Änderung im Random Modul dürften zumindest Passwörter zwischen Python 2.2 und 2.3 "defekt" werden, aber das solle nun nicht mehr so dolle stören...
Ich lasse es jetzt erstmal so und bei der nächsten PyLucid Release wird da nochmal angepackt:
Zum einen kommt ein neuer Crypt Algo ran
Zum anderen gibt es dann hoffentlich den User-Pass-Recovery und im schlimmsten Fall müßen sich die User halt ein neues Passwort erstellen.
"Password recovery" setzt doch aber voraus, dass das Passwort irgendwo gespeichert wird!?
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Das ist etwas verwirrend, nicht? Ich versuche schon gar nicht mehr mitzuverfolgen, wo jetzt wie welche Daten zum Login gespeichert und übertragen werden.BlackJack hat geschrieben:"Password recovery" setzt doch aber voraus, dass das Passwort irgendwo gespeichert wird!?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Nein, bloß das nicht!BlackJack hat geschrieben:"Password recovery" setzt doch aber voraus, dass das Passwort irgendwo gespeichert wird!?
Aber mal im ernst... Warum sollte man das Passwort im Klartext speichern?
Ich wollte es gerade nicht so machen wie manche Dienste und das Passwort einfach im Klartext per Mail zu senden...
Auch kommt nicht in Frage, ein zufälliges Passwort zu setzten und per Mail zuzuschicken. Ist nämlich Lustig, wenn Leute den Nick und die EMail Adresse kennen
Nein, ich hab da ehr an sowas gedacht:
- 1. User geht auf "Passwort vergessen Link"
2. Username und EMail eintragen
3. PyLucid schickt per Mail einen rücksetzt-Link zu
4. User Klickt auf den Link
5. PyLucid schaut in der DB nach ob der rücksetzt-Link korrekt ist
6. User kann ein neues Passwort eingeben
- Michael Schneider
- User
- Beiträge: 569
- Registriert: Samstag 8. April 2006, 12:31
- Wohnort: Brandenburg
Moin Jens,jens hat geschrieben:
- 1. User geht auf "Passwort vergessen Link"
2. Username und EMail eintragen
3. PyLucid schickt per Mail einen rücksetzt-Link zu
4. User Klickt auf den Link
5. PyLucid schaut in der DB nach ob der rücksetzt-Link korrekt ist
6. User kann ein neues Passwort eingeben
nenn mich "blutiger Anfänger", aber kann nicht jeder, der an der Leitung snifft und die Mail abfängt, den Link genauso verwenden?
Wahrscheinlich irre ich mich, aber ich bin auf dem Gebiet tatsächlich noch Anfänger.
Grüße,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Klar, aber was willst du dagegen tun?
Was man noch machen kann: Es wir die IP Adresse festgehalten bei der "Recovery"-Anforderung und beim anklicken des Rücksetzten-Links verglichen.
Aber der der Leitungen sniffen kann, wird wohl auch seine IP fälschen konnen.
Gegen man-in-the-middle gibt es IMHO sowieso wenig...
Was man noch machen kann: Es wir die IP Adresse festgehalten bei der "Recovery"-Anforderung und beim anklicken des Rücksetzten-Links verglichen.
Aber der der Leitungen sniffen kann, wird wohl auch seine IP fälschen konnen.
Gegen man-in-the-middle gibt es IMHO sowieso wenig...
Sollte man nicht. Wenn Du das nicht machst, dann solltest Du vielleicht nicht von "password recovery" reden. Unter der Wiederherstellung eines Passwortes versteht man halt üblicherweise eben genau das: das original Passwort kann wiederhergestellt werden.jens hat geschrieben:Nein, bloß das nicht!BlackJack hat geschrieben:"Password recovery" setzt doch aber voraus, dass das Passwort irgendwo gespeichert wird!?
Aber mal im ernst... Warum sollte man das Passwort im Klartext speichern?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
AHA!!! Es stimmt da doch was nicht!
Ich hab EvilEval mal auf source.pylucid.de installiert und das selbe Skript ausprobiert!
Also spinne ich doch nicht so ganz
Nun muß ich die Unterschiede mal näher ein Kreisen:
raus kommt auf source.pylucid.de:
Das selbe Skript liefert auf pylucid.org das:
Wie man aber sehen kann, liegt es wohl nicht an random, md5 oder XOR... An was nur dann?
Ich hab EvilEval mal auf source.pylucid.de installiert und das selbe Skript ausprobiert!
Also spinne ich doch nicht so ganz
Nun muß ich die Unterschiede mal näher ein Kreisen:
Code: Alles auswählen
import random, md5
print "RND:",
for i in xrange(10):
print random.Random(i).randint(0, 127),
print "\nmd5:", md5.new("password").hexdigest()
print "XOR:", ord("a"), 97^3, chr(ord("a") ^ 3)
print "-"*79
from PyLucid.system import crypt
key = "TestKey"
msg = "Das ist ein dummer Text"
encrypted = crypt.encrypt(msg, key)
print encrypted, hash(encrypted)
print crypt.decrypt(encrypted, key)
print "-"*79
crypt.__test_old_decrypt__()
Code: Alles auswählen
RND: 108 17 122 30 30 79 101 41 29 59
md5: 5f4dcc3b5aa765d61d8327deb882cf99
XOR: 97 98 b
-------------------------------------------------------------------------------
okwRlzA+AwKamlSRQQkZRkosQGoMLAo1DGlMCzdJNTFrPxMeACcK -9130123997626601219
Das ist ein dummer Text
-------------------------------------------------------------------------------
__________________________________________________________________
old decrypt implementation test:
Test Data ok: True
Traceback (most recent call last):
File "", line 23, in ?
File "/var/www/jedie/bin/source.pylucid.de/PyLucid/system/crypt.py", line 191, in __test_old_decrypt__
d = decrypt(old_crypt_value, password, use_bz2=False)
File "/var/www/jedie/bin/source.pylucid.de/PyLucid/system/crypt.py", line 148, in decrypt
txt = __old_hast_test(txt)
File "/var/www/jedie/bin/source.pylucid.de/PyLucid/system/crypt.py", line 114, in __old_hast_test
raise WrongChecksum("hash value split failed (%s) '%s'" % (e,txt))
WrongChecksum: hash value split failed (need more than 1 value to unpack) 'qnJ/e1(|~"pQvYZy[
BB AfIJiK
Code: Alles auswählen
RND: 108 17 122 30 30 79 101 41 29 59
md5: 5f4dcc3b5aa765d61d8327deb882cf99
XOR: 97 98 b
-------------------------------------------------------------------------------
yVljhgh0UwKKz2GMUTs5BSE5Mns0Zlo1HDx5Fid7FXIAKmEPOG1a -734220794
Das ist ein dummer Text
-------------------------------------------------------------------------------
__________________________________________________________________
old decrypt implementation test:
Test Data ok: True
encrypt test: True
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
HA! Und es liegt doch an Random!
liefert auf Python v2.3.5 (#2, Oct 16 2006, 19:19:48) [GCC 3.3.5 (Debian 1:3.3.5-13)] das:
Code: Alles auswählen
import random
for a in "Dies ist ein dummer Beispieltext...":
print random.Random(a).randint(0, 127),
auf Python v2.4.3 (#2, Oct 6 2006, 07:49:22) [GCC 4.0.3 (Ubuntu 4.0.3-1ubuntu5)] aber was anderes:102 22 77 82 47 22 82 22 47 77 22 46 47 72 71 101 101 77 81 47 41 77 22 82 19 22 77 36 22 77 62 22 99 99 99
EDIT: selbst mit dem folgenden Code kommen unterschiedliche Werte raus:95 43 1 20 47 43 20 7 47 1 43 96 47 17 103 46 46 1 71 47 10 1 43 20 38 43 1 36 7 1 68 7 116 116 116
Code: Alles auswählen
import random
for a in "Dies ist ein dummer Beispieltext...":
print random.WichmannHill(a).randint(0, 127),
So ganz unabhängig sind die Ergebnisse aber nicht, das fällt besonders an den drei letzten Werten auf, scheint aber für alle zu gelten.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hab ein wenig rumprobiert, aber das ganze ist nicht ganz so einfach, weil z.Z. das encoding nicht klar in crypt.py geregelt ist
Von daher lasse ich das doch erstmal sein und verschiebe das Thema auf die nächste PyLucid Release... Dann kann man halt z.Z. Probleme beim Serverumzug bekommen...
Von daher lasse ich das doch erstmal sein und verschiebe das Thema auf die nächste PyLucid Release... Dann kann man halt z.Z. Probleme beim Serverumzug bekommen...
- Michael Schneider
- User
- Beiträge: 569
- Registriert: Samstag 8. April 2006, 12:31
- Wohnort: Brandenburg
Hi,
ich weiß, das ist nur Pseudo-Zufall, aber die letzten drei Zahlen sehen an sich schon nicht nach Zufall aus, und wenn man dann noch beide Zeilen vergleicht...
Michael
ich weiß, das ist nur Pseudo-Zufall, aber die letzten drei Zahlen sehen an sich schon nicht nach Zufall aus, und wenn man dann noch beide Zeilen vergleicht...
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...