Недавно я читал книгу о безопасном способе хранения пароля в базе данных. Книга началась с MD5, SHA1 и CRYPT_BLOWFISH. Из того, что я читаю, я понимаю, что безопасный способ хранения паролей – это использование CRYPT вместе со случайным солем на пользователя (значение, которое пользователь вставляет во время регистрации, например, имя пользователя), не сохраняя соль в базе данных.
Итак, скажем, что я генерирую соль:
$salt = '$2y$11$'; $salt = $salt.md5($username);
Поскольку мы знаем, что хэш MD5 – строка длиной 32 символа. Итак, 7 + 32 = 39 символов string = SALT Что-то вроде этого: $2y$11$243dc6440dfd91e35a773035da362f4e
Затем я генерирую хэш с помощью crypt()
:
$hash = crypt($password,$salt);
Хеш склепа всегда приводит к 60-символьной строке. Результат: $2y$11$243dc6440dfd91e35a773uY4TBuP14hk.KZq4VvOWV8EhT03Vj8Tu
Если хакер получит доступ к базе данных, он / она увидит часть $2y$11$
из 60-символьной строки выше.
Мой вопрос: Является ли эта информация полезной для хакера (зная метод хэширования и стоимость)?
Должен ли я хранить хеш, опуская эту часть? 243dc6440dfd91e35a773uY4TBuP14hk.KZq4VvOWV8EhT03Vj8Tu
Будет ли это еще хуже для хакера?
Помимо этого, существуют ли какие-либо другие предложения относительно безопасности паролей ПОСЛЕ того, как хакер получает доступ к базе данных?