Bal*_*nas 2 php hash password-protection
我正在创建一个带数据库的登录系统,并想询问散列密码.我目前在PHP中使用函数password_hash(),另外我添加了一个20个字符的自定义随机字符串.看起来像这样:
$salt = generateRandomString();
$hashedPwd = password_hash($pwd + $salt, PASSWORD_DEFAULT);
Run Code Online (Sandbox Code Playgroud)
功能:
function generateRandomString($length = 20) {
$characters='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+{}|[]/?~`';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
Run Code Online (Sandbox Code Playgroud)
我稍后也会将随机字符串发送到数据库,并在登录时将其与密码一起验证.
我的问题是我是否需要额外的字符串?请记住,我希望它尽可能安全.
首先,不要在散列/存储过程中生成随机字符串并将其包含在内.
它将password_verify()在验证期间失败,因为它不会知道添加的盐是什么,因为它不是其核心过程的一部分.
我的问题是我是否需要额外的字符串?
答:不,我上面已经说过了.
为什么?首先它不会起作用,而且不需要它.
password_hash() 自己生成.
如果你真的想要添加自己的盐,那么删除你正在使用的方法添加到哈希.它列在手册中.
你应该小心,因为,我引用:
" 警告自PHP 7.0.0起,salt选项已被弃用.现在,最好只使用默认生成的salt."
注意:您应该注意手册注释中的警告:
警告
强烈建议您不要为此功能生成自己的盐.如果您没有指定,它将自动为您创建安全盐.
如上所述,在PHP 7.0中提供salt选项将生成弃用警告.在将来的PHP版本中,可能会删除对手动提供salt的支持.
既然你似乎是新人; 如果您尚未使用预准备语句来存储和检索数据,那么我强烈建议您考虑使用它们.
它将有助于防止可能的SQL注入.
请记住,我希望它尽可能安全.
您可以使用PHP 7.2.0中引入的东西,即Argon2.
有关此问题的更多信息,请参阅以下内容:
它没有那么安全.