2010-12-04 2 views
4

Я собираюсь сделать «вход в систему» ​​для своего приложения и задавался вопросом, что является лучшим способом зашифровать пароль для моего пользователя, который я буду вводить в моей базе данных? Я нашел много способов в Google, но не знаю, какой из них лучше.пароль для шифрования

+0

вам нужны "зашифрованные" пароли и пароли "HASHED" делать? Это не то же самое. Хехед более безопасен, но если вам нужно будет когда-нибудь их прочитать, тогда зашифрованный путь. Большинство ответов ниже предполагают, что вы хотите хешировать. Можете ли вы уточнить :)? – 2010-12-04 11:24:35

+0

Я хочу хэши. Более безопасно :) – Alex 2010-12-04 12:06:53

ответ

8

Я бы пошел в одну сторону salted hash.

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

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

Добавляя соль в микс, вы гарантируете, что хеш для паролей, которые, как оказалось, будут одинаковыми, имеют другой хэш, потому что соленая часть отличается. Поэтому, если у двух пользователей есть один и тот же пароль «Пароль1234», сохраненный хэш для двух не будет одинаковым, поэтому нельзя определить, что у двух пользователей одинаковый пароль.

+0

+1, но я бы не рекомендовал использовать SHA1. Я бы рекомендовал blowfish/twofish или SHA-2. См. Http://stackoverflow.com/questions/1561174/sha512-vs-blowfish-and-bcrypt – Falcon 2010-12-04 11:17:28

+0

Кошелек SHA1/SHA2 не является оптимальным, так как он быстрый и, следовательно, более восприимчив к грубой силе. Так что лучше использовать KDF. – CodesInChaos 2010-12-04 11:24:21

+1

Это отличное место, чтобы начать работу с этим http://www.obviex.com/samples/EncryptionWithSalt.aspx – Tom 2010-12-04 11:27:13

-1

Использование криптографических алгоритм обеспечивает рамки .net

обычно, многие приложения использует MD5 algorithem

See here

3

Я рекомендую использовать Rfc2898DeriveBytes

Он использует хорошо стандартизированный Key-ДИФФЕРЕНЦ-Function , и современные хеши. Вам необходимо передать соль в дополнение к паролю для предотвращения радужных столов. И он смешивает соль и пароль для вас, поэтому вам не нужно выяснять, как это сделать самому.

1

Использовать bcrypt. Нет, действительно, отбросьте любые идеи, которые у вас есть, для создания собственного метода и use bcrypt. В мире уже достаточно небезопасных паролей хеширования.

Хранение соленых паролей, солями для каждого пользователя, конечно, все хорошо и хорошо. Но соление только предотвращает атаки радужного стола, это не предотвращает грубой силы. Поэтому, как ни парадоксально, вы не хотите использовать быстрый метод для генерации или проверки хэшей паролей. MD5, SHA, что угодно - они все быстрые. Повторите за мной: используйте bcrypt.

Смежные вопросы