J'ai un code ici pour un système de connexion, qui est purement ou à des fins d'apprentissage, créé avec l'aide des gens de stackoverflow, et on m'a dit de ne pas stocker le sel et le hash, mais plutôt ensemble. Je me demande comment je vais comparer les mots de passe lorsque l'utilisateur essaie de se connecter. Si le sel n'est pas stocké, comment puis-je comparer les deux? Quelqu'un peut-il aider?Comment comparer les mots de passe des utilisateurs pour se connecter avec ce code?
require("constants.php");
$DBH = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
function createSalt() {
$length = mt_rand(64, 128);
$salt = '';
for ($i = 0; $i < $length; $i++) {
$salt .= chr(mt_rand(33, 255));
}
return $salt;
}
//Salt function created by ircmaxell
function registerNewUser() {
//Check to see if Username Is In Use//
$q = $DBH->prepare("SELECT id FROM users WHERE username = ?");
$username = filter_var($username, FILTER_SANITIZE_STRING);
$data = array($username);
$q->execute($data);
$row = $q->fetch();
if ($row === false) {
//If Username Is Not Already In Use Insert Data//
$hash = hash('sha256', $pass);
$salt = createSalt();
$hash = hash('sha256', $salt . $hash . $pass); //UPDATED
$data = array($username, $hash, $salt);
$qInsert = $DBH->prepare(
"INSERT INTO users (username, password, salt) values (?, ?, ?)"
);
$qInsert->execute($data); //Inserts User Data Into Table//
}
}
Vous pouvez ignorer la ligne '$ hash = hash ('sha256', $ pass);' – Jacco