【问题标题】:PBKDF2 password storage - how to validate?PBKDF2 密码存储 - 如何验证?
【发布时间】:2014-10-20 23:54:42
【问题描述】:

我想弄清楚在登录期间使用 PBKDF2 时如何验证密码。我正在使用 PHP,所以这里是一个基本的密码生成代码:

$salt = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
echo hash_pbkdf2('sha256', 'password', $salt, 1000, 32);

我已将此哈希密码存储在数据库中。我不知道如何针对登录输入测试此密码,因为我没有盐,并且盐是为每个用户随机生成的。如何从存储的密码中“提取”盐,将其添加到输入的密码中并根据存储的密码测试结果?

【问题讨论】:

标签: php passwords salt pbkdf2


【解决方案1】:

您需要将盐与哈希一起存储,例如:

$hash = $salt . '|' . hash_pbkdf2(.., .., $salt, ..);

然后您可以稍后再次从中提取盐并将其反馈回验证算法。实际上,您应该使用哈希的所有相关输入参数(显然密码本身除外)来执行此操作,以允许您稍后根据需要更改算法,同时仍然能够验证已经哈希的密码:

$hash = $algo . '|' . $salt . '|' . $rounds . '|' . hash_pbkdf2($algo, .., $salt, $rounds, ..);

实际上,您应该使用crypt API,它已经这样做了。

但实际上,您应该使用password_hash,它是crypt 的用户友好型包装器,可确保您正确操作。

【讨论】:

  • 我完全理解这一点,但是我在这个系统中没有得到一件事......如果我们通过将它伪装成哈希来暴露它,那么使用盐有什么意义?跨度>
  • 盐的重点不是保密,只是为了使哈希唯一。
  • 嗨,@deceze,我也想知道如何在我正在构建的 Web 应用程序中实现这种类型的密码散列,但是它尚未收到任何输入,请注意看?上面的评论似乎是我的问题的一个几乎完美的解决方案,我只是不确定为什么它不会按预期输出。
猜你喜欢
  • 2020-02-29
  • 2016-01-13
  • 2012-07-28
  • 1970-01-01
  • 2021-10-25
  • 2014-10-13
  • 2014-09-09
  • 1970-01-01
  • 2011-01-23
相关资源
最近更新 更多