So verwenden Sie die Funktion „password_hash' von PHP für das Hashing und die Überprüfung von Passwörtern
P粉538462187
2023-08-21 18:37:28
<p>In letzter Zeit habe ich versucht, meine eigene Sicherheit für ein Anmeldeskript zu implementieren, das ich im Internet gefunden habe. Als ich versuchte zu lernen, wie man für jeden Benutzer ein Salt generiert, bin ich auf <code>password_hash</code> gestoßen. </p>
<p>Soweit ich weiß (aus der Lektüre auf dieser Seite), wird das Salt bei Verwendung von <code>password_hash</code> bereits in der Zeile generiert. ist das echt? </p>
<p>Ich habe noch eine Frage: Ist es sinnvoll, zwei Salze zu verwenden? Eine direkt in der Datei und eine in der Datenbank? Wenn also jemand das Salt in der Datenbank knackt, haben Sie dieses Salt immer noch in der Datei. Ich habe hier gelesen, dass das Aufbewahren von Salz niemals eine kluge Idee ist, aber ich war immer verwirrt darüber, was die Leute damit meinen. </p>
是的,你理解得没错,函数password_hash()会自动生成一个盐,并将其包含在生成的哈希值中。将盐存储在数据库中是完全正确的,即使已知也能发挥作用。
你提到的第二个盐(存储在文件中的盐)实际上是一种“胡椒粉”或服务器端密钥。如果在哈希之前添加它(就像盐一样),那么你就添加了一种胡椒粉。不过,有一种更好的方法,你可以先计算哈希值,然后使用服务器端密钥加密(双向加密)哈希值。这样你就可以在必要时更改密钥。
与盐不同,这个密钥应该保密。人们经常混淆并试图隐藏盐,但最好让盐发挥作用,并使用密钥添加秘密。
使用
password_hash
是存储密码的推荐方式。不要将它们分开存储到数据库和文件中。假设我们有以下输入:
首先通过以下方式对密码进行哈希处理:
然后查看输出结果:
可以看到它已经被哈希处理了(我假设你已经完成了这些步骤)。
现在将这个哈希密码存储到数据库中,确保你的密码列足够大以容纳哈希值(至少60个字符或更长)。当用户要求登录时,你可以通过以下方式检查数据库中的哈希值与密码输入是否匹配:
官方参考