sql >> Database teknologi >  >> RDS >> Sqlserver

Krypter adgangskoder på SQL Server 2008 ved hjælp af SHA1

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.




  1. Primefaces 5.0 diagrammer - hvordan man opretter diagrammodeller og serier dynamisk udelukkende ud fra databaseværdier

  2. Ødelagte filer Microsoft Office 2007 ASP.NET 1.1 og SQL Server

  3. hvordan man kun vælger unikke værdier fra relaterede tabeller

  4. Generer klasse fra databasetabel