哈希密码的最佳方法是什么?password_hash足够安全还是PHP 7中有更安全的方法?

6 php password-protection php-password-hash php-7

哈希密码的最佳方法是什么?我知道一种做得很好的方法,但我想知道是否有更好的方法来在PHP 7+中使用哈希密码password_hash().password_hash足够好吗?

<?php
password_hash('PASSWORD HERE', PASSWORD_DEFAULT);
?>
Run Code Online (Sandbox Code Playgroud)

Fun*_*ner 8

"我想知道是否有一种更好的方法可以在PHP 7+中密码密码然后使用password_hash.密码是否足够好?"

是的,它足够安全,是的,有更好/更安全的方式.由于PHP 7.2,Argon2是赢得了一个新实施(散列)方法的一部分密码散列比赛它提供了一个更强大的方法,你要想让你的PHP的版本升级到7.2.

关于此的维基说:

Argon2是密码哈希竞赛推荐的密码哈希算法,是一种用于安全散列密码的现代算法.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,则可以增加"成本".

这个答案和相关的帖子中拉出来,在PHP 5.5和设置成本选项中生成密码哈希,我引用:

将cost参数增加1,可以将计算哈希值所需的时间加倍.cost参数是迭代计数的对数(base-2),表示:

$ iterations = 2 ^ $ cost;

您还可以在Stack Overflow上查询此其他问答:

  • 默认算法会随着时间的推移而变化,因此坚持使用PASSWORD_DEFAULT参数可以为将来提供更多证明(仍然有很多未维护的代码在运行...)。但是,很高兴知道Argon2最终将其纳入了PHP API。 (2认同)