Hi
ich versuche gerade ein Skript aus C# bzw. VB nach Python zu übersetzen. Mir machen die ZeichenUmwandlungs-Funktionen Probleme. Vielleicht ist es für jemanden hier ein Kinderspiel:
http://pastebin.com/QT5Q47Gr
Meine Probleme liegen in Zeile 9 bzw 23. Da wird ein Byte mit ToString("X") umgewandelt. (Ein Oktalzeichen?).
Gruß
pabo
Mysql-Passwörter Skript
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Das scheint mir auch in C# relativ schleierhaft zu sein. Zum einen gibt es FormsAuthentication.HashPasswordForStoringInConfigFile (schrecklicher Name). Zum anderen ist die Initialisierung des StringBuilders falsch. Und zu guter letzt ist .ToString("X") vermutlich auch noch falsch.
1.ToString("X") -> 1
Gewünscht ist jedoch ziemlich sicher
2.ToString("X2") -> 01
:K
1.ToString("X") -> 1
Gewünscht ist jedoch ziemlich sicher
2.ToString("X2") -> 01
:K
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Das ToString() bei der VB.NET-Variante ist okay. Nur die C#-Version ist falsch. Bei VB.NET wird ja das Äquivalent zu ("0" + "%x" % n)[-2:] gemacht, also falls die von ToString("X") erzeugte Hex-Zahl nur einstellig ist, wird die zuvor vorgefügte 0 eben mit genommen. In beiden Fällen scheint es mir aber Blödsinn zu sein, wie die Kapazität des StringBuilder initialisiert wird. Ich vermute, dass auch in VB.NET es so ähnlich wie in Java ist, wo der Print-String eines Array nicht der Inhalt ist, sondern irgendein anderer Wert. Dessen Länge zu nehmen ist genauso falsch wie die Länge des Arrays in der C#, wo ja der Hex-String doppelt so lang wird. Schlecht ist auch, dass "*" nicht einfach zuerst in den StringBuffer zu packen, sondern es später (mit einem impliziten StringBuilder) zu addieren. Natürlich könnte man auch einfach wissen, dass ein SHA1 20 Bytes lang ist und damit der Hex-String 40 Zeichen hat.
In Python:
Stefan
In Python:
Code: Alles auswählen
def genkey(key):
import hashlib
return "*" + hashlib.sha1(key.encode("utf-8")).hexdigest()
Zuletzt geändert von sma am Sonntag 13. Juni 2010, 09:02, insgesamt 1-mal geändert.
@derdon: Vielleicht wollte sma dass der OP wenigstens noch ein ganz klein bisschen Eigenleistung erbringen muss.
Weil das Forum den Code nicht automatisch ausführt und mir zeigt, ob er korrekt funktioniert. Dafür sind andere Forumsteinehmer daderdon hat geschrieben:Ähm, warum nimmt die Funktion genkey den Parameter key an, benutzt diesen aber gar nicht?
Stefan
Wow, hier passiert aber eine Menge. Hut ab.
Und tatsächlich: es geht als Einzeiler:
t()
Und tatsächlich: es geht als Einzeiler:
Code: Alles auswählen
def encodePassword(self, password, salt=None):
return '*%s' % sha1(sha1(unicode(password, "utf-8")).digest()).hexdiges
@pabo: Damit berechnest Du die Prüfumme von der Prüfsumme und wenn `passwort` etwas ausserhalb von ASCII enthält dürfte das nicht funktionieren.