【问题标题】:What is the best way to hash a password? Is password_hash safe enough or is there a safer method in PHP 7?散列密码的最佳方法是什么? password_hash 足够安全还是 PHP 7 中有更安全的方法?
【发布时间】:2017-11-30 07:10:36
【问题描述】:

散列密码的最佳方法是什么?我知道一种做得很好的方法,但我想知道是否有更好的方法在 PHP 7+ 中散列密码然后password_hash()。 password_hash 够用吗?

<?php
password_hash('PASSWORD HERE', PASSWORD_DEFAULT);
?>

【问题讨论】:

  • 是的,它是你可以用 PHP 做的最好的事情,它将适应未来的需求(算法可以交换)。
  • 这不是重复的,我重新打开了这个问题。从 PHP 7.2 开始,Argon2 现在在该版本的 PHP 中实现,并提供了更强大的散列方法。
  • 有人刚刚投票以他们所说的重复项再次关闭问题。 OP专门询问是否有更好的方法。副本不包括这一点(Argon2)。请不要这样标记它,请删除它的标记。这是一个特定的问题,适用于 PHP 7+。编辑(ping)@RC。
  • 如果某个答案解决了您的问题,请考虑接受该答案。以下是meta.stackexchange.com/questions/5234/… 然后返回此处并对勾号/复选标记执行相同操作直到它变为绿色的方法。这通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,可能想要发布(更多)答案。您将获得积分,并鼓励其他人帮助您。 欢迎来到 Stack!
  • @RC。我只是说原始副本似乎来自您。如果我错了,那么我道歉。我看到你的(成员)名字是名单上的第一个,这就是原因。如果你看我上面的评论,这个问题是一个特定的问题,包括你在 cmets 中发布的链接在内的重复项没有提到 Argon2,这就是为什么我决定重新打开这个问题以涵盖整个问题而不是只是一部分。我觉得对于安装了 PHP 7.2 的服务器来说,这将是一个很好的规范问答。

标签: php php-7 password-protection php-password-hash


【解决方案1】:

“我想知道在 PHP 7+ 中是否有比 password_hash 更好的方法来散列密码。password_hash 是否足够好?”

是的,它足够安全,是的,还有更好/更安全的方法。从 PHP 7.2 开始,Argon2 是新实现的(散列)方法的一部分,该方法赢得了 Password Hashing Competition,如果您想将 PHP 版本升级到 7.2,它提供了一种更强大的方法。

wiki 表示:

Argon2 是 Password Hashing Competition 推荐的密码散列算法,是一种用于安全散列密码的现代算法。 Argon2 解决了现有算法的几个关键缺点,因为它是为最高的内存填充率而设计的,并且可以有效地使用多个计算单元,同时仍然可以防御权衡攻击。与只采用单一成本因子的 Bcrypt 不同,Argon2 由三个不同的因子参数化:

  1. 定义算法的内存使用的内存成本
  2. 定义算法执行时间和迭代次数的时间成本
  3. 还有一个并行度因子,它定义了并行线程的数量

您还可以查看以下链接,其中包含有关 Libsodium 的更多信息https://paragonie.com/blog/2016/02/how-safely-store-password-in-2016

http://php.net/manual/en/function.password-hash.php 的手册还包含有关 PASSWORD_ARGON2I 的信息。

变更日志指出:

7.2.0 添加了对使用 PASSWORD_ARGON2I 的 Argon2 密码的支持。


如果升级到 PHP 7.2 不是一个选项,那么您可能会增加“成本”。

来自this answer 和相关帖子Generating Password Hash In PHP 5.5 And Setting Cost Option,我引用:

将cost参数增加1,计算哈希值所需的时间加倍。成本参数是迭代次数的对数(以 2 为底),即:

$iterations = 2 ^ $cost;

您也可以在 Stack Overflow 上查看其他问答:

【讨论】:

  • 旁注:对于那些正在为安装了 PHP 7.2 的服务器寻求更强大的散列方法的人以及那些(尚未)了解的人,我觉得这篇文章将作为一个规范的问答这个新实现的(散列)方法(在 PHP 7.2 中)。
  • 默认算法会随着时间的推移而改变,所以坚持使用PASSWORD_DEFAULT 参数可能更适合未来(还有很多未维护的代码仍在运行......)。但很高兴知道 Argon2 终于进入了 PHP API。
  • 确实@martinstoeckli 和TBH,我大约一个月前才听说Argon2。这是在 PHP 7.2.0 中添加/实现的一个非常有趣的(新)方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 2011-05-16
  • 2013-02-11
  • 1970-01-01
相关资源
最近更新 更多