Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Salgando meus hashes com PHP e MySQL


Em primeiro lugar, seu DBMS (MySQL) não precisa ter nenhum suporte para hashes criptográficos. Você pode fazer tudo isso no lado do PHP, e isso também é o que você deve fazer.

Se você deseja armazenar sal e hash na mesma coluna, você precisa concatená-los.
// 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;

Agora, se você quiser verificar uma senha, faça:
// 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';
}

Você pode querer dar uma olhada em phpass , que também utiliza essa técnica. É uma solução de hash PHP que usa salga entre algumas outras coisas.

Você definitivamente deve dar uma olhada na resposta para a pergunta que o WolfOdrade vinculou.