0

私は現在、ログイン機能と登録機能を備えた独自のユーザークラスに取り組んでいます。私は主に学習体験のためにこれを行っています。今、私は解決できない問題を抱えています。私の登録機能は次のようになります。

public function createUser($username, $email, $password)
{   
    $password = trim($password);
//Generate users salt
$user_salt = $this->getRandomHash();

//Salt and Hash the password
$password = $user_salt . $password;
$password = $this->hashData($password);

//Create verification code
$code = $this->randomString();

//Commit values to database here.
$created = "INSERT INTO users (username, email, password, user_salt, is_verified, is_active, verification_code) VALUES ('".$username."','".$email."', '".$password."', '".$user_salt."', 0, 1, '".$code."')";
    $created = $this->_database->Set($created);

if($created != false){
    return true;
}

return false;
}

hashData は次のようになります。

protected function hashData($data)
{
return hash_hmac('sha512', $data, $this->_siteKey);
}

これは私のログイン機能です:

$password = trim($password);
//Select users row from database base on $email
$selection = "SELECT * FROM users WHERE username='".$username."' LIMIT 1";
    $selection = $this->_database->Get($selection);

    $row = mysqli_fetch_assoc($selection);
    //Salt and hash password for checking
    $password = $row['user_salt'] . $password;
    $password = $this->hashData($password);

    $match = false;
    //Check email and password hash match database row
    if($username == $row['username'] && $password == $row['password']){
       $match = true;
    }

ここでの問題は、パスワードを正しく入力したと確信しているにもかかわらず、パスワードが一致しないことです。入力したパスワードをハッシュするために同じソルトを使用しているため、なぜ失敗するのかよくわかりません。多分私はここで何か完全に間違っています...さらにコードが必要な場合はお知らせください。そうでなければ、助けてくれる人に感謝します。

4

1 に答える 1

1

私の愚かな間違い!

データベースのソルト列は、長さ 50 のソルトのみを受け入れていました。生成されたソルトはずっと長かった..

于 2012-09-21T21:14:30.453 に答える