MVC Password Свойство Hash - PullRequest
       4

MVC Password Свойство Hash

1 голос
/ 19 ноября 2011

Я тренируюсь с односторонним хэш-шифрованием.

У меня есть модель MVC с Entity Framework, и я хотел сохранить значение пароля.Я надеялся получить свойство только для записи, но обнаружил, что если у меня нет возвращаемого значения, оно не сохраняется в базе данных.Всякий раз, когда я посещаю окно редактирования, я вижу свой хэш.Я смог обойти это, используя пустое поле ввода общего пароля в представлении редактирования.

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

Кто-нибудь может предложить лучший метод?Заранее благодарим за ваши ответы.

[DataType(DataType.Password), MaxLength(50)]
    private string _Password;
    public string Password
    {
        get
        {
            return _Password;
        }

        set
        {
            if(!string.IsNullOrEmpty(value))
            {
            _Password = FormsAuthentication.HashPasswordForStoringInConfigFile(value, "MD5");
            }
        }

    }

1 Ответ

2 голосов
/ 19 ноября 2011

Лучший способ сделать это - создать два свойства для вашего класса сущностей.Один из них будет представлять хешированный пароль, и он будет доступен для чтения / записи, так что EF сможет успешно его обработать.Безопасно предоставлять хешированный пароль в режиме чтения / записи, потому что практически невозможно восстановить открытый текст из хэша.

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

Наконец, вы должны создать метод Validate (), который принимает пароль в виде открытого текста, хэширует его, а затем сравнивает его со свойством hash для целей аутентификации.

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

Кроме того, вы должны посолить хэш пароля (я сделал это с GUID пользователя впрошлого), поэтому один и тот же пароль, используемый двумя разными пользователями, не будет иметь одинакового значения хеш-функции.Это можно сделать путем объединения открытого текста пароля с уникальным, но детерминированным значением, связанным с пользователем, перед его хэшированием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...