我应该将自定义随机生成方法中的salt添加到哈希密码中吗?PHP

我应该将自定义随机生成方法中的salt添加到哈希密码中吗?PHP,php,hash,password-protection,Php,Hash,Password Protection,我正在创建一个带有数据库的登录系统,想询问有关散列密码的问题。我目前在PHP中使用函数password_hash(),此外,我还添加了一个20个字符的自定义随机字符串。看起来像这样: $salt = generateRandomString(); $hashedPwd = password_hash($pwd + $salt, PASSWORD_DEFAULT); 以及功能: function generateRandomString($length = 20) { $charact

我正在创建一个带有数据库的登录系统,想询问有关散列密码的问题。我目前在PHP中使用函数password_hash(),此外,我还添加了一个20个字符的自定义随机字符串。看起来像这样:

 $salt = generateRandomString();
 $hashedPwd = password_hash($pwd + $salt, PASSWORD_DEFAULT);
以及功能:

function generateRandomString($length = 20) {
   $characters='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+{}|[]/?~`';
   $charactersLength = strlen($characters);
   $randomString = '';
   for ($i = 0; $i < $length; $i++) {
       $randomString .= $characters[rand(0, $charactersLength - 1)];
   }
   return $randomString;
function generateRandomString($length=20){
$characters='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@$%^&*(),+{}|[]/?`;
$charactersLength=strlen($characters);
$randomString='';
对于($i=0;$i<$length;$i++){
$randomString.=$characters[rand(0,$charactersLength-1)];
}
返回$randomString;
稍后,我还将随机字符串发送到数据库,并在登录时与密码一起进行验证


我的问题是我是否需要额外的字符串?请记住,我希望它尽可能安全。

密码\u哈希生成自己的salt值,因此不需要提供一个


从PHP 7.0.0开始,salt选项已被弃用,您可以在PHP的网站上找到一条警告,内容如下:

警告自PHP7.0.0起,salt选项已被弃用。现在最好只使用默认生成的salt

这是使用
密码\u BCRYPT
作为算法时提供的一个选项。还要注意:

小心使用
密码\u BCRYPT
作为算法,将导致
密码
参数被截断为72个字符的最大长度

我可以告诉你的一件事,虽然与安全性无关,但你应该检查哈希的
成本是否合适,以便使它更高效、更安全

以上所有内容以及更多内容,包括一个脚本,用于检查服务器性能的适当
成本

此外,还有另一个警告,内容如下:

注意强烈建议您不要为此函数生成自己的salt。如果您未指定salt,它将自动为您创建安全salt


首先,不要生成随机字符串并在散列/存储过程中包含它

它将在验证过程中失败,因为它不知道添加的盐是什么,因为它不是其核心过程的一部分

我的问题是我是否需要额外的字符串

答:没有,我上面已经说过了

为什么?首先它不起作用,也不需要

生成自己的

如果你真的想添加你自己的盐,那么删除你正在使用的添加到散列的方法。手册中列出了它

不过,你应该小心,正如我引述的:

警告自PHP 7.0.0起,salt选项已被弃用。现在,最好只使用默认生成的salt。”

注意:您应该注意手册注释中的警告:

小心

强烈建议您不要为此函数生成自己的salt。如果您未指定salt,它将自动为您创建安全salt

如上所述,在PHP7.0中提供salt选项将生成一个弃用警告。对手动提供salt的支持可能会在未来的PHP版本中删除

因为您在这方面似乎是新手;如果您还没有使用准备好的语句来存储和检索数据,那么我强烈建议您考虑使用它们

这将有助于防止可能的SQL注入


请记住,我希望这是尽可能安全的

您可以使用PHP7.2.0中引入的Argon2

有关这方面的更多信息,请参阅以下内容:


它没有那么安全。

如果你担心安全问题,想要添加哈希,你需要手动创建一个哈希,并将其添加到哈希密码的两端,然后在检查数据库时将其包括在注册和登录中。

是的,但如果我添加额外的,是否更安全?就个人而言,我认为这太过分了。我认为你比别人更容易受到弱密码的威胁。谢谢你,网络陌生人,这些都是很有价值的见解。