这个PHP crypt示例是否正确?

时间:2011-11-07 02:17:49

标签: php encryption hash passwords blowfish

要加密:

$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
}

1 个答案:

答案 0 :(得分:1)

通常,salt会按用户存储在数据库中,因此,如果攻击者可以访问您的整个密码数据库,则攻击者必须逐个强制每个用户。

此外,使用盐的每个站点或每个应用程序部分是有意义的,以确保常用密码和常见盐的表(一个或两个字符很容易,日期是可以忍受的,自从epoch会大得多,因为epoch很困难,微不足道,128位的随机性是不可能的)不能用于你的应用程序的数据库。如果你的每用户盐足够大,那么它就没用了 - 所以如果你的数据库有足够的空间来存储更大的每用户盐,那就去吧。