Является ли этот пример PHP-склепа правильным? - PullRequest
1 голос
/ 07 ноября 2011

Для шифрования:

$encryptedPassword = crypt($password, '$2a$07$usesomesillystringforsalt$');

Должна ли часть $ Использовать некоторыеsillystringforsalt $ быть рандомизированной или фиксированной? (Я думаю, исправлено, но я хочу быть уверен).


Пример результата:

$2a$07$usesomesillystringforeHwaCeDEv6rYjbWCzbzsFKwD4sDLktr

Это правильное зашифрованное значение?


Для проверки правильности введенного пользователем пароля для входа в систему:

(Допустим, есть поле ввода с именем password и сравнивается со значением $password, полученным из базы данных):

if (crypt($_POST['password'], '$2a$07$usesomesillystringforsalt$') === crypt($password, '$2a$07$usesomesillystringforsalt$')) {
    // Password submitted is correct
}

1 Ответ

1 голос
/ 07 ноября 2011

Обычно соли хранятся в базе данных для каждого пользователя, поэтому, если злоумышленник получит доступ ко всей базе данных паролей, злоумышленник должен перебить каждого пользователя в отдельности.

Кроме того, имеет смысл использовать часть соли для каждого сайта или приложения, чтобы гарантировать, что таблицы общих паролей и общих солей (один или два символа будут простыми, дата будет допустимой, секунды с момента Эпоха была бы намного больше, микросекунды, так как эпоха была бы трудной, 128 битов случайности невозможно) не может быть использовано против базы данных вашего приложения. Если ваши соли для каждого пользователя достаточно велики, это менее полезно - поэтому, если в вашей базе данных есть место для хранения больших солей для каждого пользователя, сделайте это.

...