Hash- og saltadgangskoder i C#
https://crackstation.net/hashing-security.htm
https://www.bentasker.co.uk/blog/security/201-why-you-should-be-asking-how-your-passwords-are-stored
Som jeg sagde i mine kommentarer, er hashing af adgangskoder noget, du nok ikke selv burde gøre.
Et par ting at bemærke:
- SHA1 anbefales ikke til adgangskoder
- Adgangskoder skal være saltede
- Du bør bruge en verificeret userstore-ramme i stedet for at forsøge at oprette din egen, da du sandsynligvis vil "gøre det forkert"
- Jeg er sikker på, at der er mange flere
Når det er sagt , for at udføre dit specifikke spørgsmål, vil du gerne have noget som dette:
Brugere----userIdpasswordHashed
passwordHashed gemmer en hashed version af brugerens adgangskode (den almindelige tekstadgangskode gemmes aldrig nogen steder vedholdende).
for at kontrollere for gyldig adgangskode gøres noget som dette:
ALTER procedure [dbo].[proc_UserLogin] @userid varchar(20), @password nvarchar(50) As erklærer @ReturnVal varchar(500)SET NOCOUNT ON hvis eksisterer(vælg brugerid,adgangskode fra LoginManager hvor [email protected]
and password=HASHBYTES('SHA1', @password)) set @ReturnVal='0|Logget ind med succes' else set @ReturnVal='1|Login mislykkedes/brugernavnet findes ikke' vælg @ReturnVal
For at indsætte/opdatere brugeradgangskoder skal du sørge for at gemme den hash-kodede adgangskode og ikke den almindelige tekstadgangskode som sådan;
INSERT INTO users(userId, passwordHashed) VALUES (@userId, HASHBYTES('SHA1', @rawPassword)
eller
OPDATERING brugere SET passwordHased =HASHBYTES('SHA1', @rawPassword) WHERE userId =@userId
EDIT:
har lige indset, at du spørger, hvordan man udfører hashen i C#, ikke SQL. Du kan udføre følgende (taget fra Hashing med SHA1 Algoritme i C# ):
offentlig streng Hash(byte [] temp){ ved hjælp af (SHA1Managed sha1 =new SHA1Managed()) { var hash =sha1.ComputeHash(temp); returner Convert.ToBase64String(hash); }}
Dit kodestykke kunne være:
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);
Du skal også bemærke, at du bør parametrere dine parametre til din lagrede procedure i stedet for at videregive dem på den måde, du er - hvilket det ser ud til, at du allerede har et separat spørgsmål i angående det.