Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Crypter les mots de passe sur SQL Server 2008 en utilisant SHA1

Hash et salt-passwords en 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

Comme je l'ai indiqué dans mes commentaires, le hachage des mots de passe est quelque chose que vous ne devriez probablement pas faire vous-même.

Quelques points à noter :

  • SHA1 n'est pas recommandé pour les mots de passe
  • Les mots de passe doivent être salés
  • Vous devez utiliser un cadre de magasin d'utilisateurs vérifié plutôt que d'essayer de créer le vôtre, car vous "le ferez probablement mal"
  • Je suis sûr qu'il y en a beaucoup d'autres

Cela étant dit , pour répondre à votre question spécifique, vous voudriez quelque chose comme ceci :

Users
----
userId
passwordHashed

passwordHashed stocke une version hachée du mot de passe de l'utilisateur (le mot de passe en texte brut n'est jamais stocké nulle part dans la persistance.)

pour vérifier un mot de passe valide, quelque chose comme ceci est fait :

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

Pour insérer/mettre à jour les mots de passe utilisateur, vous devez vous assurer de stocker le mot de passe haché et non le mot de passe en texte brut, en tant que tel ;

INSERT INTO users(userId, passwordHashed) 
VALUES (@userId, HASHBYTES('SHA1', @rawPassword)

ou

UPDATE users 
SET passwordHased = HASHBYTES('SHA1', @rawPassword) 
WHERE userId = @userId

MODIFIER :

venez de réaliser que vous demandez comment accomplir le hachage en C #, pas en SQL. Vous pouvez effectuer ce qui suit (tiré de Hachage avec SHA1 Algorithme en C# ):

public string Hash(byte [] temp)
{
    using (SHA1Managed sha1 = new SHA1Managed())
    {
        var hash = sha1.ComputeHash(temp);
        return Convert.ToBase64String(hash);
    }
}

Votre extrait de code pourrait être :

            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);

Vous devez également noter que vous devez paramétrer vos paramètres sur votre procédure stockée plutôt que de les transmettre comme vous le faites - ce qui semble être une question distincte à ce sujet.