Maison > développement back-end > C++ > Comment hacher en toute sécurité des mots de passe dans .NET à l'aide de PBKDF2 ?

Comment hacher en toute sécurité des mots de passe dans .NET à l'aide de PBKDF2 ?

Barbara Streisand
Libérer: 2025-01-23 12:32:12
original
806 Les gens l'ont consulté

How to Securely Hash Passwords in .NET Using PBKDF2?

Utilisez les meilleures pratiques actuelles pour hacher en toute sécurité les mots de passe dans .NET

Lors du stockage de mots de passe dans une base de données, il est essentiel de protéger les informations sensibles à l'aide d'algorithmes de hachage. Les méthodes de cryptage ne conviennent pas à cette fin. Le meilleur algorithme de hachage de mot de passe natif dans .NET est PBKDF2 (Password-Based Key Derivation Function 2).

Guide étape par étape pour le hachage de mot de passe à l'aide de PBKDF2

Étape 1 : Générer la valeur du sel

Le sel est une valeur aléatoire utilisée pour rendre unique le hachage de chaque mot de passe. Créez une valeur de sel à l'aide d'un PRNG cryptographique (générateur de nombres pseudo-aléatoires) :

<code class="language-csharp">byte[] salt;
new RNGCryptoServiceProvider().GetBytes(salt = new byte[16]);</code>
Copier après la connexion

Étape 2 : Créer un objet PBKDF2 et calculer la valeur de hachage

Instanciez la classe Rfc2898DeriveBytes et spécifiez le mot de passe, le sel et le nombre d'itérations souhaité (~ 100 000 recommandé) :

<code class="language-csharp">var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000);
byte[] hash = pbkdf2.GetBytes(20);</code>
Copier après la connexion

Étape 3 : Combinez les octets de sel et de chiffrement pour le stockage

Combinez les octets de sel et de mot de passe pour créer une seule chaîne pour le stockage de la base de données :

<code class="language-csharp">byte[] hashBytes = new byte[36];
Array.Copy(salt, 0, hashBytes, 0, 16);
Array.Copy(hash, 0, hashBytes, 16, 20);</code>
Copier après la connexion

Étape 4 : Convertir en chaîne Base64 pour le stockage

Encodez les octets combinés dans une chaîne Base64 pour les stocker dans la base de données :

<code class="language-csharp">string savedPasswordHash = Convert.ToBase64String(hashBytes);</code>
Copier après la connexion

Étape 5 : Vérifiez le mot de passe saisi par l'utilisateur

Pour vérifier que le mot de passe saisi par l'utilisateur correspond au hachage stocké :

  • Récupérez le hachage du mot de passe stocké dans la base de données.
  • Extraire les octets de sel et de hachage de la valeur de hachage stockée.
  • Calculez un nouveau hachage en utilisant le mot de passe saisi par l'utilisateur et le sel extrait.
  • Comparez le hachage calculé avec le hachage stocké. S'ils correspondent, le mot de passe est valide.
<code class="language-csharp">string savedPasswordHash = DBContext.GetUser(u => u.UserName == user).Password;

byte[] hashBytes = Convert.FromBase64String(savedPasswordHash);
byte[] salt = new byte[16];
Array.Copy(hashBytes, 0, salt, 0, 16);

var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000);
byte[] hash = pbkdf2.GetBytes(20);

for (int i=0; i < 20; i++)
    if (hashBytes[i+16] != hash[i])
        throw new UnauthorizedAccessException();</code>
Copier après la connexion

Remarque : Le nombre d'itérations peut être ajusté en fonction des exigences de performances de l'application. Une valeur minimale généralement recommandée est de 10 000.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal