Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Szyfruj hasła w Sql Server 2008 przy użyciu SHA1

Hasła haszujące i salt w C#

https://crackstation.net/hashing-security.htm

https://www.bentasker.co.uk/blog/security/201-dlaczego-powinnis-byc-pytac-jak-sa-haslo-sa-s przechowywane

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uruchamianie programu SQL Server 2014 na maszynie wirtualnej platformy Azure

  2. Zmień separator na przecinek podczas wysyłania wyników zapytania pocztą e-mail w programie SQL Server (T-SQL)

  3. Jak przekonwertować tinyint z t-sql na liczbę całkowitą w c#?

  4. TSQL łączenie wielu wierszy w jeden wiersz

  5. Praca z danymi Salesforce.com w usługach raportowania SQL Server