C# Language PBKDF2 pour hachage de mot de passe


Exemple

PBKDF2 ("Fonction de dérivation de clé par mot de passe 2") est l'une des fonctions de hachage recommandées pour le hachage de mot de passe. Cela fait partie de la RFC-2898 .

Rfc2898DeriveBytes -Class de .NET est basé sur HMACSHA1.

    using System.Security.Cryptography;

    ...

    public const int SALT_SIZE = 24; // size in bytes
    public const int HASH_SIZE = 24; // size in bytes
    public const int ITERATIONS = 100000; // number of pbkdf2 iterations

    public static byte[] CreateHash(string input)
    {
        // Generate a salt
        RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();
        byte[] salt = new byte[SALT_SIZE];
        provider.GetBytes(salt);

        // Generate the hash
        Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(input, salt, ITERATIONS);
        return pbkdf2.GetBytes(HASH_SIZE);
    }

PBKDF2 nécessite un sel et le nombre d'itérations.

Itérations:

Un nombre élevé d'itérations ralentira l'algorithme, ce qui rend le piratage des mots de passe beaucoup plus difficile. Un nombre élevé d'itérations est donc recommandé. PBKDF2 est un ordre de grandeur plus lent que MD5 par exemple.

Sel:

Un sel empêchera la recherche de valeurs de hachage dans les tables arc- en- ciel. Il doit être stocké avec le mot de passe hash. Un sel par mot de passe (pas un sel global) est recommandé.