Мне нужно солить и записать некоторые пароли, чтобы я мог безопасно хранить их в базе данных. У вас есть какие-либо советы или идеи относительно того, как лучше всего это сделать с помощью Linq To SQL?
Солитие и хеширование паролей с использованием Linq To SQL
Ответ 1
LINQ to SQL не имеет большого значения в этом случае. Вы можете использовать любой механизм, который хотите, потому что вы не будете делать хэширование и соление в SQL.
Шаги по сохранению пароля будут идти по этим строкам:
- Получить пароль как открытый текст вместе с идентификатором пользователя.
- Генерировать (и помнить) соль.
- Объединить соль с текстом пароля, например. добавьте его или добавьте его.
- Хешируйте полученный текст с помощью хеш-функции
- Сохраните идентификатор пользователя, хэш и соль в вашей БД.
Действия по проверке пароля будут идти по этим строкам:
- Получить пароль как открытый текст вместе с идентификатором пользователя.
- Извлеките хэшированные данные и соль из БД для предоставленного идентификатора пользователя.
- Объедините соль с указанным текстом пароля.
- Хешируйте полученный текст с помощью хеш-функции.
- Сравните хэш от функции с хешем, полученным из БД.
- Если они равны, введенный пароль был правильным.
Ответ 2
Поскольку вы используете .NET и С#, используйте System.Security.Cryptography.SHA512Managed пространство имен для генерации значения соли и пароля hash
Ответ 3
В принципе, как говорится в @Vojislav.
Возможно, вы захотите посмотреть bcrypt для хеширования - он считается очень хорошим.
Ответ 4
Если для входа в учетную запись пользователя вы не хотите использовать хэширование с солью + пароль, вы также хотите использовать растяжение клавиш в соответствии с PBKDF2 в документе RFC2898.
Вот API для того, чтобы делать то, что вам нужно с использованием примера: https://sourceforge.net/projects/pwdtknet
Также создает криптозвуковую соль на указанной длине