Я прочитал несколько ТАКИХ вопросов по этой теме, но мне не хватает практической практики хранения соленого хэша пароля.
Давайте начнем с некоторых основных правил:
- пароль, "foobar12" (мы не обсуждаем надежность пароля).
- язык, Java 1.6 для этого обсуждения
- база данных, postgreSQL, MySQL, SQL Server, Oracle
Для хранения пароля доступно несколько вариантов, но я хочу подумать об одном (1):
Хранить хэшированный пароль со случайной солью в БД, один столбец
Автоматический сбой хранения открытого текста не открыт для обсуждения. :) На SO и в других местах найдены решения с MD5 / SHA1 и использованием двойных колонок, как с плюсами, так и с минусами.
MD5 / SHA1 прост. MessageDigest в Java предоставляет MD5, SHA1 (через SHA512 в современных реализациях, конечно, 1.6). Кроме того, большинство перечисленных СУБД предоставляют методы для функций шифрования MD5 при вставках, обновлениях и т. Д. Проблемы становятся очевидными после того, как кто-то получает "радужные таблицы" и коллизии MD5 (и я ухватился за эти понятия).
Решения с двумя колонками основаны на идее, что salt
не должен быть секретным (ухватитесь за него). Однако второй столбец представляет сложность, которая не может быть роскошью, если у вас есть устаревшая система с одним (1) столбцом для пароля, а стоимость обновления таблицы и кода может быть слишком высокой.
Но это хранение хэша пароля со случайной солью в одном столбце БД , что мне нужно лучше понять, с практическим применением.
Мне нравится это решение по нескольким причинам: соль ожидается и учитывает унаследованные границы. Вот где я теряюсь: Если соль случайная, а пароль и соль хешируются для получения одностороннего значения для хранения, как система когда-либо может сопоставить пароль в виде открытого текста и новый случайная соль?
У меня есть теория на этот счет, и, когда я набираю текст, я, возможно, уклоняюсь от концепции: учитывая случайную соль из 128 байтов и пароль из 8 байтов ('foobar12'), программно можно было бы удалить часть хеш, который был солью, путем хеширования случайной 128-байтовой соли и получения подстроки исходного хеша, который является хешированным паролем. Затем повторное хеширование для соответствия с использованием алгоритма хеширования ...?
Так что ... все желающие помогают. :) Я близко?