登录类返回bol(false)

时间:2013-10-14 09:27:31

标签: php

我有使用此tutorial 为登录应用程序编写的fallowing类:

class passHash{

    private static $algo='$2y$';
    private static $cost ='12$';

    private function generateSalt(){
       $salt=substr(sha1(mt_rand()),0,22);
       return $salt;
    }

    public function hashPassword($password){
       $hashpassword=crypt($password,self::$algo.self::$cost.self::generateSalt());
       return $hashpassword;
    }

    public function checkPassword($hash, $password){
        $fullsalt=substr($hash,0,29);
        $newhash=crypt($password,$fullsalt);

        if ($newhash==$password){
           return true;
        }else{
           return false;
       }

   }
}

我认为代码是自我解释的,我发现有很多关于此登录类的问题 我遇到的问题是检查密码。如果我这样做:

$a=passHash::hashPassword('1234');

$b=passHash::checkPassword($a,'1234');
var_dump($b);

我选择bool(false)的结果

此代码的问题在哪里?


编辑1 如果我像这样修改checkPassword:

public function checkPassword($hash, $password){
    $fullsalt=substr($hash,0,29);
    $newhash=crypt($password,$fullsalt).'<br>';
    return $newhash;
}

然后我做:

$a=passHash::hashPassword('1234');
echo 'hashPassword: '.$a.'<br>';

$b=passHash::checkPassword($a,'1234');
echo 'checkPassword: '.$b.'<br>';
我得到了 hashPassword:$ 2Y $ 12 $ 6e29c2bbdacad854b1a63O8aty2a / .MQN0wbdmClnhXMbH3 / tfQfG
checkPassword:$ 2y $ 12 $ 6e29c2bbdacad854b1a63O8aty2a / .MQN0wbdmClnhXMbH3 / tfQfG

它们是相同的......所以问题在哪里?

2 个答案:

答案 0 :(得分:1)

测试应该是这样的:

    if ($newhash==$hash){
       return true;
    }else{
       return false;
   }

答案 1 :(得分:0)

完整的工作代码是:

class passHash{
    private static $algo='$2y$';
    private static $cost ='12$';

    private function generateSalt(){
        $salt=substr(sha1(mt_rand()),0,22);
        return $salt;
    }

    /**
    @param string $password
    */
    public function hashPassword($password){
        $hashpassword=crypt($password,self::$algo.self::$cost.self::generateSalt());
        return $hashpassword;
    }

    /**
     * @param string $hashpassword
     * @param string $password
     */
    public function checkPassword($hashpassword, $password){
        $fullsalt=substr($hashpassword,0,29);
        $newhash=crypt($password,$fullsalt);

        return ($newhash==$hashpassword);
   }
}