Как мне использовать встроенное шифрование пароля в MembershipProvider? - PullRequest
1 голос
/ 09 марта 2012

Я пишу пользовательский MembershipProvider. Конечно, я хочу зашифровать пароль, который создает пользователь. Я предполагаю, что в .NET есть что-то, что шифрует пароли. Что это такое и как мне его использовать? Какой размер строки это выводит? Я уже писал провайдерам членства, но только для того, чтобы убедиться, что пользователь действителен. Это первый раз, когда мне нужно добавить регистрацию пользователя и логин.

Я уверен, что не использую правильные условия поиска, но Google не показал мне ничего ценного для меня.

1 Ответ

1 голос
/ 10 марта 2012

Прежде всего, вы не должны шифровать пароли.Вы должны хешировать их (об этом всегда идет спор).

Для хеширования паролей вы можете использовать HMACSHA1 .Например, при создании пользователя и до сохранения пароля:

HMACSHA1 hash = new HMACSHA1();
hash.Key = youKey; // you could use machine key
encodedPassword =  Convert.ToBase64String(hash.ComputeHash(Encoding.Unicode.GetBytes(password)));

, а затем сохраните это значение в базе данных.Затем вы можете сравнить введенный пароль, хэшируя его и сравнивая хэшированные значения.

Конечно, вам нужно указать, что пароль хэшируется в файле конфигурации:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
  <providers>
    <remove name="AspNetSqlProvider" />
    <add name="SqlProvider"
      type="System.Web.Security.SqlMembershipProvider"
      passwordFormat="Hashed"
      applicationName="/" />
  </providers>
</membership>

Проверьте мой сообщение в блоге об этом.Там есть пример использования хешированных и зашифрованных паролей.

...