Создание хешированных паролей в C#

Доброго времени суток! В данной статье я покажу Вам как можно просто создать хешированные пароли
в С#.

Итак, код:

Метод, который создается случайную строку — соль — для защиты паролей


static byte[] GenerateSalt()
{
    const int SaltLength = 64;
    byte[] salt = new byte[SaltLength];

    var rngRand = new RNGCryptoServiceProvider();
    rngRand.GetBytes(salt);

    return salt;
}

Следующие два метода используют «соль», созданную выше, для создания хешированного с помощью MD5 пароля:


static byte[] GenerateMD5Hash(string password, byte[] salt)
{
    byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
    byte[] saltedPassword = new byte[salt.Length + passwordBytes.Length];

    using var hash = new MD5CryptoServiceProvider();

    return hash.ComputeHash(saltedPassword);
}

Тот же хеш, что и выше, но только созданный с помощью алгоритма SHA256


static byte[] GenerateSha256Hash(string password, byte[] salt)
{
    byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
    byte[] saltedPassword = new byte[salt.Length + passwordBytes.Length];

    using var hash = new SHA256CryptoServiceProvider();

    return hash.ComputeHash(saltedPassword);
}

Используется код выше следующим образом:


static void Main(string[] args)
{
    Console.Write("Введите пароль?");

    string password = Console.ReadLine();

    // создаем соль
    byte[] salt = GenerateSalt();

    // создаем MD5-хеш
    byte[] md5Hash = GenerateMD5Hash(password, salt);
    string md5HashString = Convert.ToBase64String(md5Hash);
    Console.WriteLine($"nMD5-хеш: {md5HashString}");

    // создаем Sha256-хеш
    byte[] sha256Hash = GenerateSha256Hash(password, salt);
    string sha256HashString = Convert.ToBase64String(sha256Hash);
    Console.WriteLine($"nSHA256: {sha256HashString}");
}


Источник