我应该将自定义随机生成方法中的salt添加到哈希密码中吗?PHP
我正在创建一个带有数据库的登录系统,想询问有关散列密码的问题。我目前在PHP中使用函数password_hash(),此外,我还添加了一个20个字符的自定义随机字符串。看起来像这样:我应该将自定义随机生成方法中的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
$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
有关这方面的更多信息,请参阅以下内容:
它没有那么安全。如果你担心安全问题,想要添加哈希,你需要手动创建一个哈希,并将其添加到哈希密码的两端,然后在检查数据库时将其包括在注册和登录中。是的,但如果我添加额外的,是否更安全?就个人而言,我认为这太过分了。我认为你比别人更容易受到弱密码的威胁。谢谢你,网络陌生人,这些都是很有价值的见解。