https://crackstation.net/hashing-security.htm
Jak wspomniałem w moich komentarzach, haszowanie haseł to coś, czego prawdopodobnie nie powinieneś robić sam.
Kilka rzeczy do zapamiętania:
- SHA1 nie jest zalecane dla haseł
- Hasła powinny być solone
- Powinieneś użyć zweryfikowanego frameworka Userstore, zamiast próbować tworzyć własne, ponieważ prawdopodobnie „zrobisz to źle”
- Jestem pewien, że jest ich znacznie więcej
To powiedziane , aby odpowiedzieć na Twoje pytanie, potrzebujesz czegoś takiego:
Users
----
userId
passwordHashed
passwordHashed przechowuje zaszyfrowaną wersję hasła użytkownika (hasło w postaci zwykłego tekstu nigdy nie jest przechowywane nigdzie w sposób trwały).
w celu sprawdzenia prawidłowego hasła wykonuje się coś takiego:
ALTER procedure [dbo].[proc_UserLogin]
@userid varchar(20),
@password nvarchar(50)
As
declare
@ReturnVal varchar(500)
SET NOCOUNT ON
if exists(select userid,password from LoginManager where [email protected] and password=HASHBYTES('SHA1', @password))
set @ReturnVal='0|Logged in Successfully'
else
set @ReturnVal='1|Login Failed/Username does not exist'
select @ReturnVal
Aby wstawić/zaktualizować hasła użytkowników, należy upewnić się, że zapisałeś hasło zaszyfrowane, a nie hasło w postaci zwykłego tekstu, jako takie;
INSERT INTO users(userId, passwordHashed)
VALUES (@userId, HASHBYTES('SHA1', @rawPassword)
lub
UPDATE users
SET passwordHased = HASHBYTES('SHA1', @rawPassword)
WHERE userId = @userId
EDYCJA:
właśnie zdałem sobie sprawę, że pytasz, jak wykonać skrót w C#, a nie w SQL. Możesz wykonać następujące czynności (zaczerpnięte z Hashing z SHA1 Algorytm w C# ):
public string Hash(byte [] temp)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
var hash = sha1.ComputeHash(temp);
return Convert.ToBase64String(hash);
}
}
Twój fragment kodu może być:
conn.Open();
string query = "EXEC dbo.proc_UserLogin'" + username.Text+ "', '" + this.Hash(System.Text.Encoding.UTF8.GetBytes(password.Text))+"'";
OleDbCommand cmd = new OleDbCommand(query, conn);
Powinieneś również zauważyć, że powinieneś sparametryzować swoje parametry do procedury składowanej, zamiast przekazywać je w taki sposób, w jaki jesteś – wygląda na to, że masz już osobne pytanie w tej sprawie.