我正在使用password_hash函数处理基本密码系统,并且想知道是否需要熟悉的“选择大写,小写,数字和符号的密码”规则。
PHP的password_hash会自动生成一个强大的随机盐,将其添加到密码中并散列结果。然后它输出一个包含三个部分的最终字符串:
这些部分连接成一个字符串:
例如,密码'password'按如下方式处理:
$password = 'password';
//using password_hash with Blowfish encryption
$hashtext = password_hash($password, PASSWORD_BCRYPT);
//user tries to log in with password $login
//which is hashed with the same encoder and salt as contained in $hashtext
if (password_verify ($login , $hashtext )) {
echo 'Password good';
}else {
echo 'Wrong password';
}
假设$ hashtext存储在一个后来被黑客攻击的数据库中,以便读取它并且编码类型和salt是已知的。安全的强度现在完全取决于密码的强度吗?即黑客设置一个具有相同编码器和盐值的函数,并运行可能密码的字典,直到结果输出与$ hashtext相同,确认要检查的字典值是原始密码。
我认为盐的随机性和复杂性使得这个过程可能不切实际,但也会使原始密码p @ 55Word真的增加安全性吗?
是的,我意识到这些是密码的可怕选择!
任何帮助将不胜感激!
非常感谢, 千瓦
答案 0 :(得分:1)
Salting,键拉伸和密码复杂性规则有其自己的用途,并且彼此无关。 password_hash()
函数...
➽确保找到明文密码没有比使用暴力强制更简单的方法了。
如果用户选择了一个非常弱的密码,例如1234
,所有这些措施都不会有帮助,因为这是攻击者将要测试的第一个组合之一。这就是为什么密码复杂性规则发明的原因,希望用户选择更强的密码。
这导致了一个问题,如果这样的密码复杂性规则确实使密码更强(但这是关于散列技术的独立问题)。这里的讨论有点基于意见。
我个人认为,复杂的规则甚至会降低密码安全性,因为人们无法记住大量强密码,并且因为它们会干扰良好的密码方案。人们可以非常有创造力来规避这些规则,密码Password-2017
将符合大多数规则,但当然是非常弱的规则。所以我的建议是只执行这两条规则: