PHP SHA256 und Salt nicht funktionieren
Ich versuche, die Kennwörter erstellen, die sha256-Hash mit $salt variable zu. Aber für einige Grund es will einfach nicht funktionieren. Arbeiten 3 Stunden auf das jetzt, und ich bin zu rippen meinem Kopf ab. Hier ist mein code:
Ich werde noch einmal versuchen, sorry ;o)
Ok, mein script funktionierte Prima, bis ich versucht, um den sha256-auf die Passwörter. Ich habe eine Datei für Benutzer erstellen, die:
$salt = "lollol";
$password = hash('sha256', $salt.$_POST['password']);
$sql = ("INSERT INTO members (username, password, name, last_name,company)VALUES('$username', '$password', '$name', '$last_name', '$company')")or die(mysql_error());
if(mysql_query($sql))
echo "Your accuont has been created.";
Scheint es, wie es korrekt in die Datenbank aufgenommen. Ich kann sehen, dass es wird immer ein Hashwert mit einigen Buchstaben und zahlen.
Aber dann, wenn ich mich versuche einzuloggen, es will einfach nicht.
Mein code für login.php ist:
$sql= "SELECT * FROM members WHERE username='$username' and password='$password'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$salt = "lollol";
$auth_user = hash('sha256', $salt.$password);
if($password == $salt.$auth_user){
echo "Logged in";
} else {
echo "Not logged in";
}
Bekam ich die Idee, dass ich zum verschlüsseln der Passwort wenn ich mich einloggen wollen, aber im nicht sicher. Ich hoffe, dass einige von Euch mir helfen kann.
Was funktioniert nicht?
Definieren Sie "einfach nicht funktioniert".
Du solltest am besten einfach nur ein minimal-Beispiel (sehr am wenigsten Sie tun könnten, ist, entfernen Sie die Kommentare, aber am Ende: nur zunächst erklären, was passieren soll, dann zeigen Sie uns einige kleine Stück code, dann erklären, was geschieht und warum diese surpirses Sie. Helfen wird leichter so!
Charlesworth ich habe eduted meine Frage jetzt.
InformationsquelleAutor skolind | 2011-06-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie versuchen, um melden Sie verketten Sie den hash mit dem salt einmal mehr
Sollte es funktionieren, wenn Sie einfach zu entfernen
Update: weiter
hier
Sie versuchen zum abrufen der Zeile, wo der Benutzername entspricht
$username
und das Passwort passt$password
. In der Datenbank sind die Passwörter bereits ein Hashwert (und$password
zu sein scheint, gar nicht definiert), so wird diese Abfrage nie wieder jede Zeile.$result
sollte nun enthalten die nur Benutzer übereinstimmt, die angegebenen Anmeldeinformationen. Seine jetzt sehr einfachBeachten Sie, dass dies noch nicht sinnvoll. Nun wir prüfen, ob
$password == hash('sha256', $salt.$password)
! ($password
ist auf beiden Seiten der==
...)Charlesworth, dass ich sehen kann. Wie sollte die id suchen, wie?
Du hast Recht. Es muss das Passwort aus
$row
. Ich werde aktualisieren, meine Antwort. Update: Nur merken, dass die Abfrage ist sinnlos zu...Und dann jetzt. Warum kannst du nicht mir sagen, wie ich mein sql werden sollte, wie dann?
InformationsquelleAutor KingCrunch
Du bist die Speicherung eines verschlüsselten Passwort, aber deine select-Abfrage sucht das unverschlüsselte Passwort.
Holen Sie sich den passenden Benutzernamen (ohne Passwort, Zustand) - Benutzernamen eindeutig sind, oder?:
InformationsquelleAutor Pavling
Verpasst Ihr Bearbeiten, aber hoffe, das hilft.
BEARBEITEN: ich sehe Sie nicht speichern eindeutige hashes.
Wenn Sie suchen, bis der Benutzer durch ein Passwort, müssen Sie den hash das Passwort in der Abfrage die gleiche Weise, die es gespeichert wurde:
Ansonsten könnten Sie nachschlagen eindeutigen Benutzernamen (nicht das Passwort) und vergleichen Sie die Hash-Eingabe, um den Wert des gespeicherten Kennwort.
Nur ändern Sie die Abfrage zum suchen von Hash-Passwort (die Art, wie Sie diese gespeichert haben).
Können Sie die anderen Validierungs-und hashing - auch wenn Ihnen die Benutzer dann Sie wissen, dass die Eingabe gültig ist.
Beachten Sie, dass dies nur funktioniert, wenn Sie den Weg kennen, Sie sind hashing-der Eingang ist genau die gleiche Weise, die Sie hashed das Passwort bei der Erstellung.
Murch Hmm, ich denke, ein abit, was Ole schrieb: , $Passwort ist auf beiden Seiten von == ist das okay? o.O ich bin sehr neu in diesem sha256
Murch - ich bin hashing diese Weise bei der Erstellung eines Kontos: $salt = "lollol"; $Passwort = hash('sha256', $salt.$_POST['password']);
Werfen Sie einen Blick auf Pavling Antwort tut mir Leid verwirrend Sie mit dem ersten Teil, ich glaube wirklich nicht, "lolol" war, wie waren Sie eigentlich das Salzen von Passwörtern, bin ich davon ausgegangen, es war ein pseudo-Wert für den Benutzer eindeutigen hash.
Murch habe ich schon. Und jetzt habe ich die genauso aussieht wie seine Antwort. Aber es funktioniert immer noch nicht. Wie viele VARCHAR() sollte mein Passwort-Feld Aussehen?
InformationsquelleAutor Wesley Murch
Lohnt es sich, zu prüfen, dass die Feldlänge in der Datenbank ist groß genug, um die ganze gehashte Passwort ohne abschneiden. Sie werden nie wieder ein Passwort match beim einloggen, wenn das Passwort gespeichert ist, der das Ende fehlt.
InformationsquelleAutor Simon