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

Comment puis-je hacher des mots de passe en toute sécurité à l'aide de PBKDF2 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-23 12:22:09659parcourir

How Can I Securely Hash Passwords Using PBKDF2?

Hashage sécurisé des mots de passe : le guide complet

Le stockage sécurisé des mots de passe est essentiel au maintien de la confidentialité et de la sécurité des utilisateurs. Même si le chiffrement peut sembler une solution simple, ce n’est pas la méthode idéale à cette fin. Le hachage, en revanche, est la méthode privilégiée pour stocker les mots de passe en toute sécurité.

Processus de hachage de mot de passe étape par étape

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

Tout d'abord, créez un sel aléatoire (valeur unique) à l'aide d'un générateur de nombres pseudo-aléatoires (PRNG) cryptographiquement sécurisé :

<code class="language-c#">byte[] salt;
new RNGCryptoServiceProvider().GetBytes(salt = new byte[16]);</code>

Étape 2 : Hacher le mot de passe

Ensuite, initialisez l'algorithme PBKDF2 (Password-Based Key Derivation Function 2) :

<code class="language-c#">var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000);
byte[] hash = pbkdf2.GetBytes(20);</code>

Étape 3 : Mélanger le sel et le hachis

Combinez les octets de sel et de hachage de mot de passe pour une utilisation ultérieure :

<code class="language-c#">byte[] hashBytes = new byte[36];
Array.Copy(salt, 0, hashBytes, 0, 16);
Array.Copy(hash, 0, hashBytes, 16, 20);</code>

Étape 4 : Encoder pour le stockage

Convertissez la valeur combinée du sel et du hachage en une chaîne Base64 pour un stockage en toute sécurité :

<code class="language-c#">string savedPasswordHash = Convert.ToBase64String(hashBytes);</code>

Étape 5 : Vérifier le mot de passe

Pour vérifier le mot de passe saisi par l'utilisateur par rapport au hachage stocké, récupérez le hachage stocké :

<code class="language-c#">/* 获取存储的值 */
string savedPasswordHash = DBContext.GetUser(u => u.UserName == user).Password;</code>

Extraire les octets et le sel :

<code class="language-c#">/* 提取字节 */
byte[] hashBytes = Convert.FromBase64String(savedPasswordHash);
/* 获取盐值 */
byte[] salt = new byte[16];
Array.Copy(hashBytes, 0, salt, 0, 16);</code>

Calculez la valeur de hachage du mot de passe saisi par l'utilisateur :

<code class="language-c#">var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000);
byte[] hash = pbkdf2.GetBytes(20);</code>

Résultats de comparaison :

<code class="language-c#">/* 比较结果 */
for (int i=0; i < 20; i++)
    if (hashBytes[i+16] != hash[i])
        throw new UnauthorizedAccessException();</code>

En suivant ces étapes, vous pouvez hacher les mots de passe de vos applications de manière efficace et sécurisée.

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!

Déclaration:
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