Хеширование базы паролей с помощью LINQ to SQL - PullRequest
1 голос
/ 24 февраля 2012

В настоящее время я работаю над формой входа в систему, и я слышал, что лучший способ хранить пароли - это их хэшировать, но я должен поместить «хэшированные» пароли в базу данных (в столбце, где используются только байтовые типы данных)помещен) Я помещаю байты в базу данных, а затем извлекаю, а затем преобразовываю их в строку, чтобы сравнить их с входными данными пользователей. Вот как это работает?если так, как бы я сделал это в LINQ TO SQL?

Ответы [ 3 ]

3 голосов
/ 24 февраля 2012

Я думаю, что общий подход состоит в том, чтобы засолить / хэшировать пароли перед сохранением их в базе данных, когда пользователь создает свою учетную запись.Затем для аутентификации пользователя salt / hash ввод пользователя и сравнение его с сохраненным в базе данных паролем.

2 голосов
/ 01 апреля 2013

Существует два основных различия между хешированием и шифрованием:

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

2) хеширование однонаправленное, шифрование двунаправленное, что означает, что извлечение хешированных данных не имеет смысла, но вы можете расшифровать зашифрованные данные.

Здесь может возникнуть вопрос: когда следует использоватьхеширование и использование шифрования ???

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

2 голосов
/ 24 февраля 2012

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

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

...