CPasswordHelper :: hashPassword每次都不同

时间:2014-08-06 20:33:31

标签: php yii login

我正在尝试使用Yii Framework实现登录系统。 我按照官方文件:

http://www.yiiframework.com/doc/api/1.1/CPasswordHelper

事情是生成的哈希总是改变:

        $hash =  CPasswordHelper::hashPassword($this->password); // $2a$13$hMiIFbM.D6T98ijK3.Vi1uLWTfKiGddI7ib7iXqb9nztSD.XVsI0e
        $hash2 = CPasswordHelper::hashPassword($this->password); // $2a$13$bDUGC5I8HcQB8XGtY/gXPOzv0KOSkDE.heSMbhD7I1bsvrGEnhV5.
        $hash3 = CPasswordHelper::hashPassword($this->password); // $2a$13$vKilaioNV.vze0v/mrLqaujFg4nDRlRq68GxP/Iyhvz8iQ96witAe

        if(!CPasswordHelper::verifyPassword($user->password, $hash)){ // 
            $this->errorCode = self::ERROR_PASSWORD_INVALID;
        }

当然,当我尝试验证密码时,它总是失败! 我错过了什么吗????我每次都想换盐,但不知道该怎么做....

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

这就是盐渍哈希的工作原理 - 盐总是不同的,所以哈希总是不同的。 salt包含在生成的哈希中,并且此库知道如何从哈希中提取salt,以便它可以重新生成相同的哈希。

虽然您尚未明确$this->password$user->password的来源,但您应该使用用户输入的原始未散列密码作为第一个参数。我猜测$user->password是数据库中的哈希版本,你应该将其作为第二个参数传递。

验证密码时,您不需要自己进行任何散列。

把所有这些放在一起(如果我的精神力量在起作用:-) ......

CPasswordHelper::verifyPassword($this->password, $user->password)