Mysql
 sql >> Base de données >  >> RDS >> Mysql

Saler mes hachages avec PHP et MySQL

Tout d'abord, votre SGBD (MySQL) n'a pas besoin de prendre en charge les hachages cryptographiques. Vous pouvez faire tout cela du côté PHP, et c'est aussi ce que vous devriez faire.

Si vous souhaitez stocker du sel et du hachage dans la même colonne, vous devez les concaténer.

// 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;

Maintenant, si vous voulez vérifier un mot de passe, faites :

// 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';
}

Vous voudrez peut-être jeter un œil à phpass , qui utilise également cette technique. Il s'agit d'une solution de hachage PHP qui utilise entre autres le salage.

Vous devriez certainement jeter un œil à la réponse à la question liée à WolfOdrade.