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

Salting meiner Hashes mit PHP und MySQL

Zunächst einmal muss Ihr DBMS (MySQL) keine Unterstützung für kryptografische Hashes haben. All das können Sie auf der PHP-Seite tun, und das sollten Sie auch tun.

Wenn Sie Salt und Haschisch in derselben Spalte speichern möchten, müssen Sie sie verketten.

// the plaintext password
$password = (string) $_GET['password'];

// you'll want better RNG in reality
// make sure number is 4 chars long
$salt = str_pad((string) rand(1, 1000), 4, '0', STR_PAD_LEFT);

// you may want to use more measures here too
// concatenate hash with salt
$user_password = sha512($password . $salt) . $salt;

Wenn Sie nun ein Passwort verifizieren möchten, tun Sie Folgendes:

// the plaintext password
$password = (string) $_GET['password'];

// the hash from the db
$user_password = $row['user_password'];

// extract the salt
// just cut off the last 4 chars
$salt = substr($user_password, -4);
$hash = substr($user_password, 0, -4);

// verify
if (sha512($password . $salt) == $hash) {
  echo 'match';
}

Vielleicht möchten Sie einen Blick auf phpass werfen , die ebenfalls diese Technik verwendet. Es ist eine PHP-Hashing-Lösung, die unter anderem Salting verwendet.

Sie sollten sich unbedingt die Antwort auf die Frage anschauen, mit der WolfOdrade verlinkt ist.