0

我目前对以下 php 代码有疑问:

if ($result['username'] == $_POST["name"]) {
        $bcrypt = new Bcrypt(10);
        $password = $_POST["password"];
        $hashdb = $result['password'];

        $hash = $bcrypt->hash($password);
        $isGood = $bcrypt->verify($password, $hashdb);

        if ($isGood == 1) {

            if($result['active'] == 1) {

                $_SESSION["login"] = $result['firstname']." ".$result['lastname'];
                $_SESSION["functionlevel"] = $result['functionlevel'];

                header("location:startpagina.php");
            } else {
                echo 'Account blocked or not activated';
            }


        } else {
            echo 'Password not correct';
        }

}  else {
    echo 'Username not correct';
}

我正在使用Andrew Moore bcrypt 类来散列和验证密码。由于某种原因,我的 if 语句似乎失败并在第二个if语句之后突然停止。如果此失败,则显示密码不正确选项。但如果它是真的它不会继续到第三if

我在第二个中尝试了不同的选项,if例如:

if ($isGood){

if ($isGood == true){

if ($isGood !== false){

if ($isGood !== 0){

但不知何故,如果满足该声明,这些似乎都不会继续。它只是再次显示登录页面,而不是继续startpagina.php。登录页面在没有 bcrypt 实现的情况下运行良好,并且只需检查两个 md5 哈希值。

有人可以帮我找出问题吗?

4

1 回答 1

0

您的 $isGood 总是错误的 - 因为您没有正确验证哈希。

改变

    $hash = $bcrypt->hash($password);
    $isGood = $bcrypt->verify($password, $hashdb);

    $hash = $bcrypt->hash($_POST["password"]);
    $isGood = $bcrypt->verify($hashdb, $hash);

我就是这样写的

if ($result['username'] == $_POST["name"]) {
        $bcrypt = new Bcrypt(10);

        if ($bcrypt->verify($result['password'], $bcrypt->hash($_POST["password"]))) {

            if($result['active']) {

                $_SESSION["login"] = $result['firstname']." ".$result['lastname'];
                $_SESSION["functionlevel"] = $result['functionlevel'];

                header("location:startpagina.php");
                exit();
            } else {
                echo 'Account blocked or not activated';
            }
        } else {
            echo 'Password not correct';
        }

}  else {
    echo 'Username not correct';
}
于 2012-12-22T10:42:10.997 回答