mysql SHA1密码无法重新验证php SHA1密码

时间:2016-02-24 17:25:59

标签: php mysql

因此,我在从数据库调用用户时遇到问题,因为SHA1密码无法与DB SHA1密码正确比较。

代码:

if($_SERVER['REQUEST_METHOD'] == "POST") {

if(isset($_POST['email'])) {
    $username = $_POST['email'];
}
if(isset($_POST['password'])) {
    $password = $_POST['password'];
}
if($username && $password) {


    $stmt = "SELECT memID, memFirst, memLast, roleID FROM MEMBER WHERE memEmail LIKE ? AND memPass = SHA1(?)";


    try{
        $STH = $DBH->prepare($stmt);
        $STH->bindParam(1, $username);
        $STH->bindParam(2, $password);
        $STH->execute();

        $STH->setFetchMode(PDO::FETCH_ASSOC);
        echo 'true';

        if($STH->rowCount() == 1) {
            echo 'count';
            $row = $STH->fetch();
            $_SESSION['user'] = $row['memID'];
            $_SESSION['user']['first'] = $row['memFirst'];
            $_SESSION['user']['last'] = $row['memLast'];
            $_SESSION['user']['role'] = $row['roleID'];
            $_SESSION['user']['timeout'] = time();

            header('Location: index.php');

        }

    }catch(PDOException $e) {
        echo $e->getMessage();

    }

}

}

现在数据库中唯一的记录是测试用户他们的记录是:

|memFirst|memLast|roleID|memPass                         |memEmail     |
|test    |test   |3     |7110eda4d09e062aa5e4a390b0a572ac|test@test.com|
                         this is SHA1(1234)

这些是我正在调用的值,但它不会带来记录。

当我运行带有SHA1 DB值的代码时,它运行得很好,但是当我尝试根据用户的输入运行它时,它表示rowcount为0。

1 个答案:

答案 0 :(得分:3)

sha1总是160位长并产生一个40长的字符串,而7110eda4d09e062aa5e4a390b0a572ac只有32长。

作为旁注:

如果您以后决定使用password_hash(),则必须记住它会生成一个60长的字符串。

它的手册建议使用255。

  

“使用bcrypt算法(默认自PHP 5.5.0起)。请注意,此常量旨在随着时间的推移而改变,因为新的和更强大的算法被添加到PHP中。因此,结果的长度使用此标识符可能会随着时间的推移而发生变化。因此,建议将结果存储在数据库列中,该列可以扩展到超过60个字符(255个字符将是一个不错的选择)。“