多次散列密码
Hashing a password more than once
如果我对密码进行两次哈希处理:
$psw1= password_hash($password,PASSWORD_DEFAULT);
$psw2=password_hash($psw1,PASSWORD_DEFAULT);
这样更安全还是没用?
P.S.: 我是 php
的新手
这将阻止您验证密码,因为您将无法重现第一个散列,因为您已经丢弃了第一个散列的随机盐。相反,要提高单个哈希的安全性,只需调整其成本因子:
password_hash($password, PASSWORD_DEFAULT, ['cost' => 12])
成本越高,散列的轮次就越多。选择一个不会使过程减慢太多但也不会太低的成本。事实上,随着时间的推移,随着更好的服务器硬件变得可用,您应该不断增加成本因素,并随着时间的推移使用更强大的算法重新散列您的用户密码。这就是 password_needs_rehash
的具体用途。
我认为这是无用的,因为一旦散列就不可能知道真正的价值是什么......至少从理论上讲是这样。
我建议使用强大的哈希函数,如 sha512 或 ripemd320,因为存储哈希密码的公开可用数据库不多。
如果您想了解更多信息,我在 Whosebug 上发现了一个有很好答案的老问题:PHP dehashing the password
如果我对密码进行两次哈希处理:
$psw1= password_hash($password,PASSWORD_DEFAULT);
$psw2=password_hash($psw1,PASSWORD_DEFAULT);
这样更安全还是没用?
P.S.: 我是 php
的新手这将阻止您验证密码,因为您将无法重现第一个散列,因为您已经丢弃了第一个散列的随机盐。相反,要提高单个哈希的安全性,只需调整其成本因子:
password_hash($password, PASSWORD_DEFAULT, ['cost' => 12])
成本越高,散列的轮次就越多。选择一个不会使过程减慢太多但也不会太低的成本。事实上,随着时间的推移,随着更好的服务器硬件变得可用,您应该不断增加成本因素,并随着时间的推移使用更强大的算法重新散列您的用户密码。这就是 password_needs_rehash
的具体用途。
我认为这是无用的,因为一旦散列就不可能知道真正的价值是什么......至少从理论上讲是这样。
我建议使用强大的哈希函数,如 sha512 或 ripemd320,因为存储哈希密码的公开可用数据库不多。
如果您想了解更多信息,我在 Whosebug 上发现了一个有很好答案的老问题:PHP dehashing the password