我有,我已經使用登錄應用程序這個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
它們是相同的..所以問題在哪裏?
只使用http://php.net/password_hash功能,而不是另起爐竈。 – bwoebi
並且不要從不兼容的上下文進行調用。顯式聲明你的函數爲靜態的,如果你想靜態使用它們! – bwoebi
在我的測試機器上我使用php.net/password_hash。但也有一些其他機器,我沒有最新的PHP(PHP 5> = 5.5.0),所以我不得不做一些事情... – Alex