2014-02-28 52 views
0

我无法找到任何地方如何验证密码,其被散列后随机盐我的代码以哈希密码后找回密码随机盐散列BCript

public function validatePassword($password){ 
     return password_verify($this->password, self::model()->password); 
    } 

但它似乎没有工作,也许任何人都可以让我知道为什么?

回答

0

再次哈希它完全相同的方式并比较2个字符串。这是大多数密码比较的方式。

+0

请注意,您必须保存为每个密码生成的盐,以便能够在比较时使用同一个密码(这对于所有密码都是独一无二的,如果密码保密,就足够安全) –

+0

准确地说,整个要点是在安全违规情况下从不存储实际密码。 –

+0

因此,这意味着我必须保存盐。那么是否有一个安全的做法,让盐表包含每个用户的用户ID和盐? – Shepard

1

你实际上并没有在你的validatePassword函数中使用$password参数。注意:$password应该是输入的明文密码,第二个参数应该包含您之前存储的散列版本。试试这个:

public function validatePassword($password){ 
    return password_verify($password, self::model()->password); 
} 

此外,最好不要自己处理盐渍。只需使用PASSWORD_DEFAULT选项,不要盐。 PHP将处理它。如果PHP版本升级更改默认值,您可以使用password_needs_rehash()来检查是否需要重新密码。