Хэш-пароль C # создает солидный вопрос - PullRequest
1 голос
/ 11 июня 2010

Если я создаю соль, используя что-то вроде этого:

public class User
    {
        private const int Hash_Salt_Length = 8;
        private byte[] saltBytes = new byte[Hash_Salt_Length];


        public User()
        {
            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
            rng.GetNonZeroBytes(saltBytes);     
        }
        ....

}

Массив saltBytes байтов будет отличаться для каждого сеанса (перезапустите приложение). Как я могу проверить пароль, чтобы пользователь мог войти в наше приложение?

Ответы [ 3 ]

8 голосов
/ 11 июня 2010

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

Обратите внимание, что вам не следует звонить GetNonZeroBytes, поскольку это обеспечивает меньшую случайность.

3 голосов
/ 11 июня 2010

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

1 голос
/ 11 июня 2010

Соль - это статическая вещь, которую вы генерируете, когда создаете свою пользовательскую запись и сохраняете ее вместе с идентификатором пользователя и хешем пароля + соли.

Когда пользователь пытается войти в систему, вы используете идентификатор для поиска соли, комбинируете ее со своим паролем, хэшируете и сравниваете с сохраненным хешем. Если они совпадают, они в.

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

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