3 votes

C# : comparer le hash du mot de passe avec l'entrée de l'utilisateur de différentes tailles , lors de l'authentification de l'utilisateur

J'ai créé un enregistrement d'utilisateur où j'ai salé le mot de passe de l'utilisateur et l'ai haché en utilisant SHA256. Plus tard, lorsque l'utilisateur doit se connecter à mon système, j'ai besoin que son mot de passe soit salé et haché : 1.récupéré le sel "chaîne" de la base de données. 2. converti le sel en octets 3. créé un nouveau byte[] = [inputPassword.length + salt.length] 4. et je l'ai haché.

maintenant le nouveau hachage est plus court que le hachage original ...(en utilisant les mêmes fonctions de hachage)

Compte tenu de ces informations, à votre avis, quel est le problème ? Est-ce que le stockage du sel en tant que CHAR dans ma base de données est erroné, si oui, comment dois-je le sauvegarder ?

Remarque : les deux hachages sont comparés au niveau de l'octet. Note : toutes les informations de l'utilisateur sont stockées dans la base de données mot de passe et sel comme CHAR

merci d'avance

3voto

Tom Hall Points 2090

Vous pourriez générer un sel à partir d'un Guid converti en une chaîne de caractères en base 64, puis l'enregistrer dans la base de données en tant que char. J'utilise nvarchar pour maximiser mes options en utilisant une chaîne .NET.

Vous pouvez ensuite mettre en œuvre quelque chose comme ceci pour générer le hachage du mot de passe original et comparer le hachage lorsque l'utilisateur se connecte :

    public static byte[] GetHash(string password, string salt)
    {
        byte[] unhashedBytes = Encoding.Unicode.GetBytes(String.Concat(salt, password));

        SHA256Managed sha256 = new SHA256Managed();
        byte[] hashedBytes = sha256.ComputeHash(unhashedBytes);

        return hashedBytes;
    }

    public static bool CompareHash(string attemptedPassword, byte[] hash, string salt)
    {
        string base64Hash = Convert.ToBase64String(hash);
        string base64AttemptedHash = Convert.ToBase64String(GetHash(attemptedPassword, salt));

        return base64Hash == base64AttemptedHash;
    }

1voto

Poma Points 2020

En général, les fonctions de hachage renvoient un hachage de taille fixe. Si vous constatez que le nouveau hachage est plus court, je pense que le problème vient de votre fonction de hachage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X