Die Authentifizierung des Benutzers login mit Salz
Ich bin mit Salz zu verschlüsseln die Passwörter der Benutzer.
Ich bin mit PHP, und hier ist ein kurzes Beispiel, was passiert, während ein Benutzer registriert.
Hier ist es:
PHP-code:
//Gives me my random key. My salt generator.
$salt = uniqid(mt_rand());
//My password via what users inputs.
$userpwd;
//Then the encryption. I use a HMAC hash.
$encrypted = hmac_hash("sha256", $userpwd, $salt);
?>
Nun, dass alle Werke, die für mich in meinem script. Aber meine Frage ist, wie kann ich einen Benutzer authentifizieren anmelden? Das neue verschlüsselte Passwort ist zufällig, also kann ich nicht vergleichen, das Passwort aus dem login-Formular zu dem gespeicherten verschlüsselten Passwort in der Datenbank.
Habe ich gesucht und nicht finden können, eine Lösung. Vielleicht habe ich nicht gesucht hart genug, aber gibt es eine Möglichkeit das zu entschlüsseln das Passwort? Was kann ich tun, um den Benutzer zu authentifizieren, die mit meinem Skript?
InformationsquelleAutor Mario | 2010-11-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hash des Benutzers eingegeben Passwort den gleichen Weg, dann vergleichen, wenn die hash-Funktion ist die gleiche wie die, die Sie gespeichert.
Haben Sie auch speichern Sie das Salz, da es verschiedene für jeden Benutzer. Ich würde auch empfehlen die Verwendung eines zweiten Salzes, die konstant über die Anwendung (gespeichert auf einer Festplatte config-Datei, so dass, selbst wenn die Datenbank kompromittiert ist, sind die Passwörter immer noch sicher).
Hinweis: Hashing ist nicht das gleiche wie Verschlüsselung; Es ist ein unumkehrbarer Prozess.
Aber Bedenken Sie, dass mit dem gleichen salt für alle reduziert die erforderliche Rechenzeit für einen brute-force-Angreifer.
Es wird auch dazu führen, dass der gleiche hash, wenn mehr als eine person das gleiche Kennwort. Es ist viel besser, ein Salz pro Benutzer (per Passwort).
Jungs, es ist nicht ein entweder-oder. Mit beide, eine Anwendung, die global Salz und einen pro Benutzer zufällig Salz. Ich nenne die letztere "Pfeffer".
Ich habe es. Danke Jungs. Meine Frage ist beantwortet.
InformationsquelleAutor Core Xii
Müssen Sie erzeugen einen einzigartigen salt für jeden user das Passwort, und speichern Sie dann den Wert des Salzes irgendwo kann man es abrufen. Zum Beispiel, indem der Salz zu einem
user
- Tabelle zusammen mit der Benutzername und das gehashte Passwort. So können Sie extrahieren Sie die bekannten Salz-und führen Sie es durch Ihre Funktion, wenn Sie gehen, um einen Benutzer zu authentifizieren.Hier ist ein Artikel mit mehr Informationen: Die Speicherung der Passwörter - richtig gemacht!
Sowie weitere Informationen über Salze: Salz-generation-und-open-source-software
Ein salt muss zufällig. (wenn es nicht zufällig ist, nennen wir es einen Schlüssel) stackoverflow.com/questions/1645161/...
Absolut. Von diesem post: "Verwenden Sie ein neues Salz, Wann immer Sie ein neues Passwort erstellen oder ändern Sie ein Passwort". Ich bin damit einverstanden, dass Sie brauchen, um zu berechnen, eine neue, einzigartige Salz jedes mal, wenn ein Passwort erzeugt wird. Dann können Sie speichern das Salz in der Datenbank, schlug ich vor. Ich sehe, wie meine Antwort wirklich nicht erklären, das ist eindeutig, also habe ich es überarbeitet...
+1 für die revision.
InformationsquelleAutor Justin Ethier
Du verschlüsseln Sie das Kennwort zum anmelden verwendet, und vergleichen Sie es mit dem verschlüsselten Passwort in der Datenbank. 🙂
InformationsquelleAutor Nathan MacInnes
Berechnen Sie den hash des Passwortes der Benutzer eingegeben hat, gerade wie Sie tun, wenn Sie registrieren. Beachten Sie, dass der code ist semi-pseudo-code, Sie müssen passen Sie Ihre Bibliotheken oder Funktionen.
Wenn das Salz gespeichert wird in der db, dann müssen Sie entweder Holen Sie es, oder tun Sie sich den Vergleich in der db.
InformationsquelleAutor Halil Özgür
Du nicht entschlüsseln, was Sie gespeichert haben. Sie hash des eingegebenen Passworts und Vergleich es mit dem, was gespeichert wurde, bei der Registrierung. Dies ist, weil, wenn die beiden hashes übereinstimmen, dann (für alle Absichten und Zwecke), können Sie sicher sein, dass die Quelldaten entspricht.
InformationsquelleAutor PaulJWilliams
Ihre Salz muss konstant sein, und nicht zufällig. So, wenn Sie überprüft das Passwort gegen den hash, alles, was Sie tun müssen, ist hash die Eingabe mit dem Salz wieder, und der resultierende hash-sollte das gleiche wie das, was kam vor.
Salz, per definition ist nicht eine Konstante, aber ein zufälliger Wert. stackoverflow.com/questions/1645161/...
Konstante, um die information, dass das Kennwort mit der es sich identifiziert. Also in diesem Fall vielleicht einige user-spezifische Daten. Einzigartige, nicht zufällig.
Lesen Sie info auf dem link, den ich gepostet, Einzigartig sein muss, einzigartig in der ganzen Welt, nicht nur auf einer einzigen Maschine. Dies kann nicht getan werden, deshalb ist random, ist die einzige gültige option ist.
Ich glaube, die Leute sind Missverständnisse, wenn Sie sagen, "nicht zufällig". Was ich nehme an, Sie meinen: es ist nicht zufällig, jedes mal, wenn es verwendet wird, für jeden Benutzer, aber gespeichert werden in Bezug auf einen bestimmten Benutzer (Salz pro Benutzer zufällig ist, aber immer noch bezieht sich auf einen einzelnen Benutzer) (sorry für die Wiederbelebung der so einen alten thread)
InformationsquelleAutor Kevin Wiskia