Я использую эти запросы ниже для проверки пользователя.Запрос SQL Server не подходит для столбца типа varbinary
Этот запрос отлично работает на SQL Server и на моем сайте Asp.Net.
SELECT *
FROM AdminUsers
WHERE username = 'admin' COLLATE SQL_Latin1_General_CP1_CS_AS
AND Password = (SELECT HASHBYTES('SHA1', 'admin123'))
Однако, когда я положил его в Asp.net/ C# код, как:
dbManager.Command.CommandText = @"SELECT * FROM AdminUsers
WHERE username= @UserName COLLATE SQL_Latin1_General_CP1_CS_AS AND
Password = (SELECT HASHBYTES('SHA1', @Password))";
dbManager.Command.Parameters.AddWithValue("@userName", username);
dbManager.Command.Parameters.AddWithValue("@Password", password);
reader = dbManager.GetDataReader();
if (reader.Read() == true)
{ //USER VALIDATED }
Это не соответствует поэтому не уверен, как назначить параметр пароля, чтобы она работает, просто чтобы подтвердить введенный пароль верно. И Password
Тип данных в таблице SQL Server - VarBinary
.
Любые предложения?
Что вы имеете в виду под "не соответствует". –
Как сказал Марк, вы не должны изобретать методы безопасности или наивно реализовывать. SHA1 является быстрым и относительно слабым, поэтому не является хорошим выбором для хэширования паролей. Есть целый набор библиотек, которые могут сделать это для вас в .Net, пожалуйста, используйте их. http://msdn.microsoft.com/en-us/library/system.security.cryptography%28v=vs.110%29.aspx например – Lukos