Как легко посолить пароль в приложении форм окон C#?

Как я могу легко посолить пароль от Текстового поля. Текст?

Разве существуют ли некоторые созданные в колдовстве в платформе.NET?

7
задан Shimmy 11 July 2010 в 00:40
поделиться

5 ответов

Некоторое время назад у нас была отличная дискуссия о лучших методах создания пароля, вы можете найти там несколько отличных идей:

Salting Your Password: Best Practices?

Я обнаружил, что это один из самых простых, будучи все еще достаточно безопасным, это использование GUID в качестве соли. Он случайный и достаточно длинный. Лучше всего будет, если вы включите строковое форматирование GUID (символы '{' и '-'), но это не обязательно.

Помните, что соль должна быть уникальной для каждого соленого предмета и что для максимальной безопасности вы должны использовать криптографически безопасный генератор случайных чисел. Помните также, что вы должны хранить свою соль вместе с паролем, иначе вы не сможете сравнить версию открытого текста с хешированной версией! Вы можете хранить соль в незашифрованном виде, если хотите; Обычно я помещаю его в поле той же таблицы, что и пароль. Цель соли не в том, чтобы оставаться скрытой, а в том, чтобы сделать радужные таблицы трудными (надеюсь, невозможными) для своевременного вычисления.

Вот небольшой фрагмент, который будет работать на C #:

RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] buffer = new byte[1024];

rng.GetBytes(buffer);
string salt = BitConverter.ToString(buffer);
var saltedPassword = password + salt;

или ...

var salt = Guid.NewGuid().ToString();
var saltedPassword = password + salt;
11
ответ дан 6 December 2019 в 11:45
поделиться

Вот хорошая статья и еще одна (которая больше адаптирована для приложений ASP.NET).

2
ответ дан 6 December 2019 в 11:45
поделиться

Здесь нет никаких премудростей, соль - это просто случайный текст, добавляемый к паролю, чтобы победить атаки по словарю - придумайте свою собственную белиберду.

0
ответ дан 6 December 2019 в 11:45
поделиться

Посмотрите на функции hmac, такие как hmacdm5, hmacsha1 или hmacsha256.
Просмотрите также пространство имен System.Security.Cryptography.

0
ответ дан 6 December 2019 в 11:45
поделиться

Я полагаю, вы запрашиваете имя пользователя вместе с паролем?

В некоторых системах имя пользователя используется как соль. (И я думаю, что это нормально.) В противном случае вам нужно будет где-то хранить свою соль и извлекать ее перед хешированием (в случае случайно созданной соли) или иметь алгоритм, который будет возвращать ту же соль для того же пользователя (и не лучше, чтобы просто использовать простой имя пользователя).

Лично используйте следующий код:

byte[] GetSaltedPasswordHash(string username, string password)
{
    byte[] pwdBytes = Encoding.UTF8.GetBytes(password);
    // byte[] salt = BitConverter.GetBytes(userId);
    byte[] salt = Encoding.UTF8.GetBytes(username);
    byte[] saltedPassword = new byte[pwdBytes.Length + salt.Length];

    Buffer.BlockCopy(pwdBytes, 0, saltedPassword, 0, pwdBytes.Length);
    Buffer.BlockCopy(salt, 0, saltedPassword, pwdBytes.Length, salt.Length);

    SHA1 sha = SHA1.Create();

    return sha.ComputeHash(saltedPassword);
}
4
ответ дан 6 December 2019 в 11:45
поделиться
Другие вопросы по тегам:

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