2013-06-09 4 views
3

Когда пользователь регистрируется, я беру их пароль и защищаю его с помощью хэша и соли, который затем сохраняется в DB mysql. Итак, когда зарегистрированный пользователь пытается войти в систему, как проверить, действительно ли пароль?Как работает безопасная аутентификация пользователя?

Единственный метод, о котором я могу думать, это получить их пароль, хэш + солить его, а затем проверить, есть ли хэш + соль в БД. Я не уверен, насколько это безопасно? Потому что это будет означать, что мой код будет хэш + соль любым паролем и найти совпадение в БД.

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

Буду признателен, если кто-нибудь сможет пролить свет на это. Я использую Java.

+0

«* Потому что это будет означать, мой код будет хэш + соль любой пароль и найти совпадение в DB * "> Можете ли вы объяснить, что вы подразумеваете под этим? –

ответ

1

в основном вы должны хранить h(password+salt) и salt в базе данных. Если какой-либо пользователь пытается войти в систему, вы получите его пароль с открытым текстом. Затем вы получаете соль пользователя из вашей базы данных, генерируете хэш password+salt, и если он совпадает с сохраненным хэшем, аутентификация прошла успешно.

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

Чтобы получить более глубокое объяснение, смотрите here или here

+0

Спасибо. Итак, я получу сохраненную соль из БД, используя имя пользователя пользователя? Разве это не означает, что если кто-то знает мое имя пользователя, они могут получить мою соль из БД и хеш + соль и сравнить ее с сохраненным хэшем? Это еще безопасно? – webDeveloper

+0

, если у кого-то есть свободный доступ к базе данных и таблица с хэшами, да. Но это очень плохая идея. – Simiil

Смежные вопросы