#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 # очень проста в использовании.