Солитие и хеширование паролей с использованием 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

Также создает криптозвуковую соль на указанной длине