Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie erstelle und speichere ich md5-Passwörter in mysql

Bearbeiten 09.11.2017:Schauen Sie sich unbedingt die Antwort von O Jones an.

Zunächst einmal ist MD5 nicht die beste Hashing-Methode, die Sie für diesen Versuch verwenden könnten, sha256 oder sha512

Das heißt, verwenden wir hash('sha256') statt md5() um den Hashing-Teil des Prozesses darzustellen.

Wenn Sie zum ersten Mal einen Benutzernamen und ein Passwort erstellen, hashen Sie das rohe Passwort mit etwas Salz (einige zufällige zusätzliche Zeichen werden jedem Passwort hinzugefügt, um es länger/stärker zu machen).

Könnte in etwa so aussehen, wenn es aus dem Formular zum Erstellen eines Benutzers kommt:

$escapedName = mysql_real_escape_string($_POST['name']); # use whatever escaping function your db requires this is very important.
$escapedPW = mysql_real_escape_string($_POST['password']);

# generate a random salt to use for this account
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));

$saltedPW =  $escapedPW . $salt;

$hashedPW = hash('sha256', $saltedPW);

$query = "insert into user (name, password, salt) values ('$escapedName', '$hashedPW', '$salt'); ";

Dann sieht es bei der Anmeldung etwa so aus:

$escapedName = mysql_real_escape_string($_POST['name']);
$escapedPW = mysql_real_escape_string($_POST['password']);

$saltQuery = "select salt from user where name = '$escapedName';";
$result = mysql_query($saltQuery);
# you'll want some error handling in production code :)
# see http://php.net/manual/en/function.mysql-query.php Example #2 for the general error handling template
$row = mysql_fetch_assoc($result);
$salt = $row['salt'];

$saltedPW =  $escapedPW . $salt;

$hashedPW = hash('sha256', $saltedPW);

$query = "select * from user where name = '$escapedName' and password = '$hashedPW'; ";

# if nonzero query return then successful login