php - Laravel 4 - 散列相同的密码给出不同的值

标签 php authentication hash laravel-4

我正在尝试使用 Auth::attempt() 方法对用户进行身份验证,但它一直失败,所以我最终得到了以下代码:

$arr = array();
$arr['verified'] = Hash::make('1234') . ' ; ' . Hash::make('1234');
return json_encode($arr);

这是结果:

{"verified":"$2y$10$V4yXBUcxealfLrzOE\/xAD.sJ8qpNhrMA6K6dENBBXYqaVx1zSETgy ; $2y$10$C9xpOWLTUyfy1KL.Y3Tot.KWADmQYFK\/HAf6uZGGXTKcVh52qHS4m"}

如您所见,第一个哈希给出 $2y$10$V4yXBUcxealfLrzOE\/xAD.sJ8qpNhrMA6K6dENBBXYqaVx1zSETgy,第二个哈希给出 $2y$10$C9xpOWLTUyfy1KL.Y3Tot.KWADmQYFK\/HAf6uZGG2qHS4TKcVh5/

这应该与数据库无关,即使在存储时,我有一个 60 个字符的密码字段。

有什么想法吗?

最佳答案

这非常好,也是它应该工作的方式。 Laravel 使用 Bcrypt用于散列,因此在散列过程中生成随机盐。盐将成为哈希的一部分,这就是为什么您会得到两个不同的结果。

veryfing 算法会自动考虑盐分。这种方法几乎不可能使用彩虹表。

这不是错误,而是毫不费力的额外安全性。

鉴于你的例子veryfing反对你的两个散列将返回真:

<?php

$hash1 = Hash::make('1234'); // A hash is generated
$hash2 = Hash::make('1234'); // Another hash is generated that differs from the first one

var_dump(Hash::check('1234', $hash1) && Hash::check('1234', $hash2));

尽管 $hash1$hash2 包含不同的哈希值,但使用给定的基本字符串对它们进行验证将评估为真。

生成的散列长度为 60 个字符。因此,应确保存储哈希的列的最小大小也为 60 个字符

关于php - Laravel 4 - 散列相同的密码给出不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381316/

相关文章:

java - 使用公钥/私钥签名进行身份验证 : What's a good message (digest)?

authentication - HTTPS中的Bitbucket : git push outputs an fatal: Authentication failed

php - 如何在 Laravel 中对密码使用 MD5 哈希?

c# - 自定义身份验证模块仅在存在凭据时调用

java - 两个java对象的不同哈希码但相同的结果

哈希与数字ID

php - 变化无常的变革冲突

php - 在 php mysql 中不显示任何结果之间

php - Zend View 在处理大数据集时渲染速度很慢

php - 禁用同一 Controller 中给定操作的身份验证