比较哈希值以检查它们是否相等

3

我正在使用BCrypt(Laravel的方式)存储我的密码

$NewValue = Hash::make(Input::get('Password'));

$OldValue = Auth::user()->password;  // Taking the value from database
if($NewValue == $OldValue)
{
return 'Both Password are equal'
}
else
{
//go for other operation
}

但是每当我检查if条件时,总是得到false。

我犯了什么错误?

2个回答

5
Laravel的哈希函数每次调用Hash::make都会生成一个新的哈希值。在内部,它调用password_hash,然后使用crypt。它总是会生成一个随机盐。这个盐包含在最终的哈希值中,因此在比较时可以解析并用于再次生成相同的哈希值。
要验证密码,您需要使用Hash::check(),其在底层使用password_verify
$password = Input::get('Password');
$hashedPassword = Auth::user()->password;  // Taking the value from database

if(Hash::check($password, $hashedPassword))
{
    return 'Both Password are equal'
}
else
{
    //go for other operation
}

你正在成为我的问题解决者,(向你学习)谢谢。 - AngularAngularAngular
你能否看一下这个问题,我已经等了很久了。http://stackoverflow.com/questions/27700021/simple-validation-rule-inside-the-model - AngularAngularAngular
我会看一下的。但是我并不是真正的验证专家...另外6个小时并不算太长。请耐心等待 ;) - lukasgeiter
是的,我同意,请让我等待并检查 :) - AngularAngularAngular

1

我尝试过以下代码 $NewValue = Hash::make(Input::get('Password')); if($NewValue == Hash::check('secret', Auth::user()->password)) { return'true';} 但是没有成功 - AngularAngularAngular
“秘密”是新值的哈希形式吗? - AngularAngularAngular
秘密将是密码的明文版本。$hashedPassword将是要检查的哈希密码。(Auth :: user()->password) - lagbox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接