@Senture

Как хранить хешированные пароли в БД?

Есть код на C# для хеширования паролей:
// Генератор соли
 private int GenerateSaltForPassword()
    {
        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
        byte[] saltBytes = new byte[4];
        rng.GetNonZeroBytes(saltBytes);
        return (((int)saltBytes[0]) << 24) + (((int)saltBytes[1]) << 16) + (((int)saltBytes[2]) << 8) + ((int)saltBytes[3]);
    }

// хеширование
    private byte[] ComputePasswordHash(string password, int salt)
    {
        byte[] saltBytes = new byte[4];
        saltBytes[0] = (byte)(salt >> 24);
        saltBytes[1] = (byte)(salt >> 16);
        saltBytes[2] = (byte)(salt >> 8);
        saltBytes[3] = (byte)(salt);

        byte[] passwordBytes = UTF8Encoding.UTF8.GetBytes(password);

        byte[] preHashed = new byte[saltBytes.Length + passwordBytes.Length];
        System.Buffer.BlockCopy(passwordBytes, 0, preHashed, 0, passwordBytes.Length);
        System.Buffer.BlockCopy(saltBytes, 0, preHashed, passwordBytes.Length, saltBytes.Length);

        SHA1 sha1 = SHA1.Create();
        return sha1.ComputeHash(preHashed);
    }

// проверка хешированного пароля и введенного для авторизации
    private bool IsPasswordValid(string passwordToValidate, int salt, byte[] correctPasswordHash)
    {
        byte[] hashedPassword = ComputePasswordHash(passwordToValidate, salt);

        return hashedPassword.SequenceEqual(correctPasswordHash);
    }


А вопрос заключается в том чтобы проверить совпадают ли пароли нужно знать соль захешированного пароля, как хранить пароль в бд? Таким видом: поле для пароля, поле для соли? Я думал что можно хранить пароль и соль в одном поле, но а как потом получить соль при авторизации?? P.S. Извините возможно за тупой вопрос.
  • Вопрос задан
  • 882 просмотра
Решения вопроса 1
pavelkarinin
@pavelkarinin
Full Stack Web Developer
Пароль вообще не стоит хранить нигде ни на сервере ни в БД, а в простейшем случае вы должны хранить лишь Salt и Hash-сумму пароля.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы