Looking for c# Keywords? Try Ask4Keywords

C# Language PBKDF2 для шифрования паролей


пример

PBKDF2 («Функция деривации ключа на основе пароля 2») является одной из рекомендуемых хеш-функций для хэширования паролей. Это часть rfc-2898 .

.NET Rfc2898DeriveBytes основан на 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 требует соли и количества итераций.

Повторы:

Большое количество итераций замедлит алгоритм, что затрудняет процесс взлома паролей. Поэтому рекомендуется большое количество итераций. PBKDF2 - порядок величин медленнее, чем MD5, например.

Поваренная соль:

Соль предотвратит поиск значений хэша в радужных таблицах. Он должен храниться рядом с хэшем пароля. Рекомендуется одна соль на пароль (не одна глобальная соль).