1

加密:

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

1 回答 1

1

通常盐分存储在每个用户的数据库中,因此如果攻击者可以访问您的整个密码数据库,则攻击者必须单独暴力破解每个用户。

此外,使用盐的每个站点或每个应用程序部分是有意义的,以确保常用密码和常用盐的表(一个或两个字符很容易,日期可以容忍,自纪元以来的秒数是更大,微秒,因为 epoch 很困难,128 位随机性是不可能的)不能用于您的应用程序的数据库。如果您的每用户盐值足够大,这将不太有用 - 因此,如果您的数据库有空间存储更大的每用户盐值,那就去吧。

于 2011-11-07T02:27:06.400 回答