我试图理解密码哈希值充分以便能够向审核员解释。
根据我对答案的寻找,我了解到password_hash()
函数是一个包装器crypt()
。在阅读 PHP 手册时预定义常量我看到它使用PASSWORD_BCRYPT
作为默认整数值(基本上它使用CRYPT_BLOWFISH
哈希密码的算法)。
让我困惑的是$options
变量,如果省略,会生成随机盐,成本将设置为10
。如果我提供更高的成本(例如:12
),因为我没有提供盐值,它仍然会生成随机盐吗?我在这里感到困惑的原因是因为我没有省略$options
而是提供不同的成本。
我的其他问题:
- 为什么增加成本值会增加安全性?
- 怎么,自从
password_hash()
是一种单向散列函数,password_verify()
由于盐是随机的,因此验证密码?
- Is
CRYPT_SHA512
比...强大CRYPT_BLOWFISH
用于散列?
I find this文章对于理解如何正确散列密码非常有用。它解释了如果哈希值很弱,如何使用各种技术来破解哈希值,以及如何正确地对密码进行哈希处理以提供足够的安全性。
如果我提供更高的成本(比如 12),它仍然会生成随机数吗?
盐,因为我没有提供盐值
是的,它会 - 作为文档表示如果省略 salt,password_hash() 将为每个散列的密码生成随机 salt(这意味着如果您从选项数组中省略 salt 值,则默认情况下它将由 password_hash() 函数生成)。而且,自 php 7.0 起,salt 选项已被弃用.
为什么增加成本值会增加安全性?
这也解释在以上文章在部分使密码破解变得更加困难:慢速哈希函数。成本设置越高,哈希函数就越慢。这个想法是让哈希函数变得非常慢,这样即使使用快速 GPU 或定制硬件,字典和暴力攻击也太慢而不值得。但是,成本应设置为合理的值(基于服务器的规格),以便在验证用户密码时不会导致明显的时间延迟。
另外,对于哈希来说,CRYPT_SHA512 比 CRYPT_BLOWFISH 更强吗?
Read this发布他们的比较。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)