要加密:
$encryptedPassword = crypt($password, '$2a$07$usesomesillystringforsalt$');
$ usesomesillystringforsalt $ 部分应该随机化还是修复? (我猜是固定的,但我想确定)。
结果示例:
$2a$07$usesomesillystringforeHwaCeDEv6rYjbWCzbzsFKwD4sDLktr
这是正确的加密值吗?
检查用户登录的给定密码是否正确:
(假设有一个名为password
的输入字段,并将其与从数据库中检索到的$password
值进行比较):
if (crypt($_POST['password'], '$2a$07$usesomesillystringforsalt$') === crypt($password, '$2a$07$usesomesillystringforsalt$')) {
// Password submitted is correct
}
答案 0 :(得分:1)
通常,salt会按用户存储在数据库中,因此,如果攻击者可以访问您的整个密码数据库,则攻击者必须逐个强制每个用户。
此外,使用盐的每个站点或每个应用程序部分是有意义的,以确保常用密码和常见盐的表(一个或两个字符很容易,日期是可以忍受的,自从epoch会大得多,因为epoch很困难,微不足道,128位的随机性是不可能的)不能用于你的应用程序的数据库。如果你的每用户盐足够大,那么它就没用了 - 所以如果你的数据库有足够的空间来存储更大的每用户盐,那就去吧。