3Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
709
709
EMPFEHLEN
-
Hallo zusammen,
ich möchte eine winzige, aber wichtige Python-Funktion in C# nachbauen. Der Python-Snippet sieht so aus:
Code :1 2 3 4 5 6 7 8
import crypt, os, time, md5, string strPass = raw_input("Enter new Passwort: ") strTime = "%s" % time.time() md5Time = md5.new(strTime) print crypt.crypt(strPass, md5Time.hexdigest()[0] + md5Time.hexdigest()[1])
Wie genau kann man das in C# nachbauen und welche Rolle spielt der Zeit-String?
Vielen Dank für eure Hilfe!
EDIT: Da hier anscheinend eine UNIX-eigene Funktion benutzt wird, helfen euch vielleicht folgende Dinge:
Code :1
uname -a
liefert
Code :1
Linux %PCNAME% 2.6.21-1-amd64 #1 SMP %DATUM% x86_64 GNU/Linux
Googe lieferte mir außerdem
Hier werden also die ersten 2 Zeichen des Datums als "Salz" benutzt, sehe ich das richtig? Wenn ja, wie genau ist time.time() definiert? Wie sieht die ausgabe von time.time() aus?crypt.crypt(word, salt)¶
word will usually be a user’s password as typed at a prompt or in a graphical interface. salt is usually a random two-character string which will be used to perturb the DES algorithm in one of 4096 ways. The characters in salt must be in the set [./a-zA-Z0-9]. Returns the hashed password as a string, which will be composed of characters from the same alphabet as the salt (the first two characters represent the salt itself).
Wie funktioniert das eigentlich mti dem Salz? Wenn ich einen String mit einem "Datumssalz" verwürze, dann kann ich doch nie mehr checken, ob das eingegebene Passwort richtig ist, ohne das Datum zu wissen oder irre ich mich hier?Geändert von Eroli (30.08.10 um 10:21 Uhr)
-
29.08.10 14:23 #2
Hi,
in dem unten aufgeführten Link kannst du nach gucken, wie die Ausgabe von time.time() aussieht bzw. diese errechnet wird.
http://docs.python.org/library/time.html#time.time
Zu den anderen Punkten:
Wenn bis heute abends (ca. 22:30 Uhr) kein weiterer geantwortet hat, werde ich mir das Problem bzw. den Fall genauer angucken und dann antworten.
Gruß
RudolfGTechnologien
(Gute) Grundkenntnisse: HTML, CSS
Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL
-
29.08.10 23:10 #3
Nicht ganz, hier werden die ersten 2 Zeichen, des MD5-Hash von der Zeit die time.time() zurückliefert genommen.
Siehe den vorherigen Post.
Also ohne jetzt genau verstanden zu haben wie bzw. was da passiert, ist das eigentlich korrekt (man benötigt also irgendwie das Datum der für das Hashen des Passworts benutzt wurde!).
Sry aber mehr steige ich da irgendwie nicht richtig durch...
Gruß
RudolfGTechnologien
(Gute) Grundkenntnisse: HTML, CSS
Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL
-
Kann mir evtl noch ein anderer helfen?
Ich habe auch einen MembershipProvider für MySQL in C# geschrieben hier rumliegen (nicht von mir), da wird das auch über so ein komisches Salt-Konstrukt gemacht. Soll ich den Code hier posten? Könnte der jemandem helfen?
Es ist mir eigentlich ziemlich wichtig, dass ich das irgendwie in C# umgesetzr kriege...
-
30.08.10 00:49 #5Technologien
(Gute) Grundkenntnisse: HTML, CSS
Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL
-
30.08.10 08:47 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Die 2 Zeichen die als Salt bei dem verwendeten DES basierten Schema verwendet werden, finden sich in der Ausgabe der crypt Funktion an den ersten beiden Stellen wieder:
GrußCode :1
crypt(X, ab) == abZ
PS: Unix crypt in .NET: http://www.codeproject.com/KB/cs/unixcrypt.aspx
PPS: Übrigens ist es völlig egal wie du den Salt berechnest, Hauptsache er ist halbwegs zufällig.Geändert von deepthroat (30.08.10 um 09:30 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hallo,
danke für die vielversprechende Antwort.
Ich habe mir UnixCrypt runtergeladen, eingebunden und eine kleine Testapplikation geschrieben:
Code csharp:1 2 3 4
private void EncryptButton_Click(object sender, EventArgs e) { EncryptedPWTextBox.Text = UnixCrypt.Crypt(PasswordTextBox.Text); }
Allerdings kommt bei jedem Klick auf den Button ein VÖLLIG anderes, verschlüsseltes Passwort heraus (Bei gleichem Inhalt der TextBox). Wie kann das sein?
Wenn ich dich richtig verstanden habe, dann kann ich den Salt ja auch irgendwie anders generieren, also einfach mal so, wie UnixCrypt das eben macht - ist ja auch egal, richtig?
Aber es kann doch nicht sein, dass sich das ganze verschlüsselte Passwort andauernd ändert...Ich dachte nur die ersten 2 Zeichen sind betroffen?
Wo habe ich den Denkfehler?Geändert von Eroli (30.08.10 um 10:26 Uhr)
-
30.08.10 10:27 #8
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Achsoo...Der Salt bestimmt welche Methode intern zur Berechnung des Hashes verwendet wird.
Aber wie kann ich denn dann nun vergleichen, ob das eingebene Passwort richtig ist und mit dem in der Datenbank übereinstimmt?
EDIT: Von hier: http://www.15seconds.com/issue/000217.htm
Sehe ich das richtig, dass der Salt auch in der Datenbank gespeichert werden muss, um einen Vergleich durchführen zu können? Das ist bei uns nämlich nicht der Fall (wenn ich micht nicht irre)...Authenticating a User
Finally, we will write code that validates a given username/password pair. The validation algorithm goes as follows:
1. Look up the given username in the user database. If found, retrieve the corresponding salt and hash values. Otherwise display the User Not Found error and exit.
2. Concatenate the submitted password with the salt retrieved from the database. Compute the hash value of the bundle.
3. Compare the value obtained in step 2 with the hash value retrieved from the database. If they match, the user is authenticated.Geändert von Eroli (30.08.10 um 10:53 Uhr)
-
30.08.10 11:14 #10
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Wie bereits gesagt, ist der verwendete Salt die ersten beiden Buchstaben des Hashes.
Um zu checken:
1. Passwort Hash aus der DB laden.
2. crypt Funktion mit dem übergebenen Passwort und den beiden ersten Buchstaben des Hashes aus der DB als Salt aufrufen.
3. wenn DB.Hash == crypt(Passwort, Salt) dann ALLOW, sonst DENY
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
[Python] Script ( .py ) aus Python Kommandozeile (python.exe) heraus öffnen
Von Hookah im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 0Letzter Beitrag: 16.12.09, 10:59 -
[Python] Regex Hilfe
Von chmee im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 2Letzter Beitrag: 07.06.09, 12:27 -
Windows-Umgebungsvariablen mit Hilfe von Perl oder Python setzen
Von DaFunk2k im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 2Letzter Beitrag: 03.07.07, 07:51 -
Hilfe: StoppUhr mit Python
Von SkinnyPuppy im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 0Letzter Beitrag: 11.06.07, 07:37 -
[Python] Video tutorial zu dem Python Webframework TurboGears (20 Min )
Von Thomas Darimont im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 0Letzter Beitrag: 07.12.06, 13:28





Zitieren

Login





