2013-10-14 46 views
0

我有,我已經使用登錄應用程序這個tutorial書面休耕類:登錄類返回BOL(假)

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); 

我門布爾的結果(假)

凡與此代碼的問題?


編輯1 如果我modifay的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

它們是相同的..所以問題在哪裏?

+3

只使用http://php.net/password_hash功能,而不是另起爐竈。 – bwoebi

+1

並且不要從不兼容的上下文進行調用。顯式聲明你的函數爲靜態的,如果你想靜態使用它們! – bwoebi

+0

在我的測試機器上我使用php.net/password_hash。但也有一些其他機器,我沒有最新的PHP(PHP 5> = 5.5.0),所以我不得不做一些事情... – Alex

回答

1

測試應該是這樣的:

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

...或更好,'返回($ newhash == $ hash);' – geomagas

+0

謝謝,它工作 – Alex

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); 
    } 
}