SQL-запрос для создания зашифрованного пароля

#c# #sql #encryption

#c# #sql #шифрование

Вопрос:

Я пытаюсь создать безопасный экран входа с паролем на c #.Прямо сейчас я только что создал экран входа в систему и могу прочитать имя пользователя и пароль из базы данных.Но то, что я разработал, не имеет зашифрованного пароля. Может ли кто-нибудь помочь мне, как написать запрос для генерации зашифрованного пароля и сохранить зашифрованное значение пароля в отдельном поле.Заранее благодарю.

Ответ №1:

Рассмотрите возможность хэширования пароля, который вы храните в данный момент. SQL может хэшировать пароль следующим образом:

 DECLARE @HashThisPassword nvarchar(4000);
SELECT @HashThisPassword = CONVERT(nvarchar(4000),'dslfdkjLK85kldhnv$n000#knf');
SELECT HashBytes('SHA1', @HashThisPassword);
  

… Но SQL даже не должен этого делать. Вы должны хэшировать пароль, как только ваше приложение C # получит его, и только после этого передавать хэшированный пароль в SQL для сохранения. При проверке, предоставил ли пользователь правильный пароль для входа, сравните хэши.

Ответ №2:

Ваш лучший выбор — одностороннее шифрование.

Что происходит в этом сценарии, так это то, что пользователь выбирает / получает пароль. Когда этот пароль сохраняется в базе данных, он проходит через это одностороннее шифрование перед сохранением. (Вы будете делать это в своем коде c #)

Затем, когда пользователь входит в систему, введенный пароль проходит через то же самое одностороннее шифрование, прежде чем его сравнивают с паролем в базе данных.

Это гарантирует, что, если хакер проникнет в базу данных, будет трудно узнать пароль, потому что им пришлось бы определить тип шифрования, а затем разработать способ его снятия с шифрования, что, насколько я понимаю, в лучшем случае сложно, в худшем — невозможно.

Вот ссылка на некоторый код, который может помочь. Одностороннее шифрование

Вы не хотите выполнять шифрование в самом sql, потому что, если хакер получит доступ к вашей базе данных, они смогут просто посмотреть на процедуру / функцию, которую вы используете для выполнения шифрования, и им будет намного проще.

И вы не хотите хранить пароль в базе данных в незашифрованном виде…

Лучше всего написать какой-нибудь код для считывания пароля, зашифровать его и обновить запись, затем все, что вам нужно сделать, это продолжать использовать тот же тип шифрования и соль.

Библиотека криптографии c # очень проста в использовании.