Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 即使密码_hash()已经提供了salt,我还必须生成额外的salt吗?_Php_Cryptography_Salt_Bcrypt_Php Password Hash - Fatal编程技术网

Php 即使密码_hash()已经提供了salt,我还必须生成额外的salt吗?

Php 即使密码_hash()已经提供了salt,我还必须生成额外的salt吗?,php,cryptography,salt,bcrypt,php-password-hash,Php,Cryptography,Salt,Bcrypt,Php Password Hash,在使用PHP的本机password_hash()函数时,我必须(或应该)生成自己的salt,尽管(据我所知),它已经可以创建salt,如本例所示(由提供): 目前,我一直在使用sha512进行哈希运算,并生成一个38500字符的salt。(我不确定字符数是否真的重要,所以我无论如何都尝试了……它似乎奏效了,比如允许我成功注册和登录用户,但我不知道这其中的全部安全缺陷) 大概是这样的: <?php $Salt = str_repeat(hash("sha512", uniqid

在使用PHP的本机password_hash()函数时,我必须(或应该)生成自己的salt,尽管(据我所知),它已经可以创建salt,如本例所示(由提供):


目前,我一直在使用sha512进行哈希运算,并生成一个38500字符的salt。(我不确定字符数是否真的重要,所以我无论如何都尝试了……它似乎奏效了,比如允许我成功注册和登录用户,但我不知道这其中的全部安全缺陷) 大概是这样的:

  <?php
  $Salt =  str_repeat(hash("sha512", uniqid(time())), 40);
  ?>

很奇怪,但说到密码学,我还有很多东西要学。 (这里有一个指向其中一种盐的链接) 现在,如果我要添加一个额外的salt(如果你说是,再次添加salt),那么我将如何使用password_verify()在中添加salt

提前感谢任何能提供帮助的人

密码\u hash()
生成自己的salt。无需再次添加salt。请参见:如果省略,则password_hash()将为每个哈希密码生成一个随机salt。这是预期的操作模式。

您不应该生成自己的salt,因为该函数使用操作系统的随机源尽可能地发挥最佳效果。换句话说,你将无法生产出更好的盐,尽管你可以做得更糟

// Leave out a salt in the options
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT, array("cost" => 11));
生成一个包含38500个字符的salt绝对没有好处。根据salt的添加方式,当您使用密码长度最大的算法(如BCrypt)时,它甚至可能会降低安全性。通常一个salt大约是20字节


盐可以保护你免受彩虹桌的攻击。一个彩虹表将不得不建立正是这种盐,因为暴力强迫随机20+密码是不可能的。如果您为每个密码添加唯一的salt,则攻击者必须为每个密码构建彩虹表。如果您对更多信息感兴趣,可以查看我的关于安全存储密码的介绍。

密码\u hash()
生成自己的salt。不用再加盐了。好吧……那么在你看来,如果我再加盐会不会让它变得不那么安全呢?盐太多对你不好如果你想探究不同加盐方案的相对优点,那么问这个问题会更好。您可能可以通过反复添加和散列密码来提高安全性,但每次迭代都会有成本。问题是“它足够安全吗?”哈哈,对您的心脏有害^。^…但它甚至会延长密码。谢谢,我非常感谢您回答中的细节!20+密码是什么意思?字符长?字节?不过我确实会生成随机密码。我刚刚发现我只能使用PHP5.2So,我不知道现在该怎么办。我一直坚持这一点,直到我找到一个可行的选择。@MasonH.Hatfield——我的意思是,现在有20多个密码,可以用一个不安全的MD5散列(BCrypt需要更长的时间)以大约20%的速度暴力破解密码。因此,长度为20个字符的密码需要大约100000000000000000000年才能破解。您是否真的坚持使用PHP5.2,BCrypt在5.3之前不受支持?如果你不能切换到5.3,你最好的选择可能是。
// Leave out a salt in the options
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT, array("cost" => 11));