【问题标题】:What about password_hash() in PHPPHP中的password_hash()怎么样
【发布时间】:2015-01-06 14:29:38
【问题描述】:

我一直在阅读有关此 password_hash() 的各种论坛和教程,这似乎有助于密码保护。

但现在我想知道是否最好为类似的函数制作自己的盐和哈希

$options = [
    'cost' => 11,
    'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
password_hash($password, PASSWORD_BCRYPT, $options);

或者只是让函数来做:

password_hash($password, PASSWORD_DEFAULT);

似乎有很多关于使用自己的盐是好是坏的讨论。

有人可以解释为什么使用自己的盐不好(或不好)吗?

【问题讨论】:

  • 来自docs,“注意 - 强烈建议您不要为此函数生成自己的盐。如果您不指定,它将自动为您创建一个安全盐。”文档中有很多关于自动生成的盐在密码学上的安全性以及创建自己的盐可能会导致问题的内容。 允许函数创建盐更安全
  • 谢谢@JayBlanchard

标签: php hash password-protection


【解决方案1】:

因为如果你不创建自己的盐,它会自动为你创建一个安全的盐。

来自文档:

注意

强烈建议您不要自己生成盐 这个功能。它会自动为你创建一个安全的盐,如果 你没有指定一个。

所以,为了回答你的问题,如果你对盐或其他不了解更多......只是不要使用你自己的盐,这个功能已经足够强大了!

【讨论】:

  • 非常感谢。我也读到过,但想在我正在制作的网站中使用它之前 100% 确定。我会尽可能将您的答案标记为正确。
【解决方案2】:

盐只是防止彩虹表攻击。
它不会使一个哈希更难破解,而是更大的整体。
如果您对每个哈希使用不同的盐,攻击者将需要为每个密码制作一个彩虹表。
这在工作方式和时间上是不切实际的。
使用伪随机 rng 生成盐可以保护您的整个密码。
https://crypto.stackexchange.com/questions/1776/can-you-help-me-understand-what-a-cryptographic-salt-is

由于该函数已经生成了安全盐,因此不建议使用实际上更糟糕的 rng 生成您自己的盐。
只需让该函数生成强盐,就可以了,因为您不必自己创建盐,所以工作量也更少。
Correct way of creating salted hash password

引用上一个链接:

建议您不要传递自己的 salt,而是让函数从操作系统的随机源创建一个加密安全的 salt。

盐将包含在生成的哈希值中,因此您不必单独存储它。只需在您的数据库中创建一个 60 字符的字符串字段并存储哈希值。函数 password_verify() 将从存储的哈希值中提取使用的盐。有关更多信息,您可以查看我的关于存储密码的教程。

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多