Je n'arrive pas à comprendre pourquoi le hachage du mot de passe utilisateur ne fonctionne pas.salaison de mot de passe - ne correspond jamais!
La façon dont je fais est la méthode normale, où lors de l'enregistrement que je crée un sel Randam et se combiner avec mot de passe et magasin, mais lorsque je tente de faire correspondre les mots de passe pour la connexion, ils échouent :(
<?php
class Model_users extends ModelType_DatabasePDO
{
//...
public function CheckCredentials($username,$password)
{
$statement = $this->prepare('SELECT user_id,user_salt,user_password FROM users WHERE user_username = :u');
$statement->bindValue(':u',$username);
if($statement->execute())
{
$user_data = $statement->fetch(PDO::FETCH_OBJ);
//Create a new hash with salt
$combined = $this->CombineHash($password,$user_data->user_salt);
//Check the combination is correct!
if($combined == $user_data->user_password)
{
return true;
}
var_dump($user_data->user_salt,$combined);
return false;
}
return false;
}
//...
public function AddUser($userdata)
{
if($userdata['username'] && $userdata['password'] && $userdata['email'] && $userdata['nickname'])
{
$statement = $this->prepare('INSERT INTO users (user_username,user_password,user_salt,user_email,user_nickname) VALUES (:username,:password,:salt,:email,:nickname)');
//Generate hashes
$salt = $this->GenerateSalt();
$password = $this->CombineHash($userdate['password'],$salt);
//Generate Data block for insert
$data = array(
':username' => $userdata['username'],
':password' => $password,
':salt' => $salt,
':email' => $userdata['email'],
':nickname' => $userdata['nickname']
);
if($statement->execute($data))
{
return true;
}
}
return false;
}
private function GenerateSalt()
{
//Create a random md5 string:
$first = md5(rand(0,100) . time() . microtime() . uniqid());
$second = md5(rand(0,100) . time() . microtime() . uniqid());
for($i=0;$i<=32;$i++)
{
$string = '';
if($i % 2)
{
$string .= $first[$i];
}else
{
$string .= $second[$i];
}
}
return md5($string);
}
private function CombineHash($password,$hash)
{
return md5($password . $hash);
}
}
?>
Toutes les variables passées dans les méthodes sont brutes et non salés ou chiffrés mais simplement validés:/
Cordialement
C'est toujours les petites choses ... Bonne prise. – bradenkeith
c'est pourquoi j'aime les langages compilés – Andrey
yea e et a, là tellement semblable, son travail maintenant, après un travail d'ordinateur 9-5 pour revenir à des projets personnels, il est difficile de se concentrer ha, merci encore. – RobertPitt