0

このチュートリアルを使用して、ログインアプリケーション用に作成した次のクラスがあります。

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) の結果をゲートします

このコードのどこに問題がありますか?


次のようにcheckPasswordを変更する場合はEDIT 1 :

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

それらは同一です..では、どこに問題がありますか?

4

2 に答える 2

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);
   }
}
于 2013-10-14T11:40:05.043 に答える