最近我一直在尝试在我在互联网上找到的一个登录脚本上实现自己的安全性。在努力学习如何为每个用户生成盐的脚本时,我偶然发现了password_hash。
根据我理解(基于这个页面上的阅读),当你使用password_hash时,盐已经在行中生成了。这是真的吗?
我还有一个问题,是否明智地使用两个盐?一个直接存在文件中,一个存在数据库中?这样,如果有人破坏了数据库中的盐,你仍然有文件中的一个盐。我在这里读到过,存储盐从来都不是一个明智的做法,但是人们说这个总是让我感到困惑。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
是的,你理解得没错,函数password_hash()会自动生成一个盐,并将其包含在生成的哈希值中。将盐存储在数据库中是完全正确的,即使已知,它也能发挥作用。
你提到的第二个盐(存储在文件中的盐),实际上是一个辣椒或服务器端密钥。如果在哈希之前添加它(就像盐一样),那么你就添加了一个辣椒。不过有一种更好的方法,你可以先计算哈希值,然后使用服务器端密钥对哈希值进行加密(双向加密)。这样你就可以在必要时更改密钥。
与盐不同,这个密钥应该保密。人们经常混淆并试图隐藏盐,但最好让盐发挥作用,并使用密钥添加秘密。