MVC 3 Crypto Helper - добавит ли это дополнительный щит, чтобы сделать пароль более безопасным? - PullRequest
1 голос
/ 21 июля 2011

A

string salt = Crypto.GenerateSalt();
string saltAndPwd = String.Concat(originalPassword, salt);
string hashedPwd = Crypto.HashPassword(saltAndPwd);

B

string hashedPwd = Crypto.HashPassword(originalPassword);

Могу ли я узнать метод A и метод B, который является более безопасным?или какой правильный подход?с отражателем я обнаружил, что это метод хеширования пароля в ядре:

public static string HashPassword(string password)
{
if (password == null)
{
    throw new ArgumentNullException("password");
    }
    return HashWithSalt(password, GenerateSaltInternal(0x10));
}

1 Ответ

3 голосов
/ 21 июля 2011

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

Хэш пароля генерируется с помощью алгоритма RFC 2898 с использованием 128-битной соли, 256-битного подключа и 1000 итераций.Формат сгенерированного байтового потока хэша: {0x00, salt, subkey}, который кодируется в base-64 перед его возвратом.

Итак, то, что в структуре уже достаточно длялюбое разумное определение достаточно хорошо.

...