2012-04-28 2 views
1

Я наткнулся на следующий фрагмент, который шифрует пароль пользователя. Это то, что я хочу сделать, потому что я не хочу хранить пароль пользователя в базе данных без какого-либо шифрования.Шифрование в C#

Это прекрасно работает для того, чего я хочу достичь, но мой вопрос заключается в следующем: как я могу его зашифровать, чтобы убедиться, что значение, которое они ввели в поле пароля, соответствует?

// Hash the password details of the user! 
private static string CreatePasswordHash(string pwd, string salt) 
{ 
    string saltAndPwd = string.Concat(pwd, salt); 
    string hashedPwd = 
    FormsAuthentication.HashPasswordForStoringInConfigFile(saltAndPwd, "SHA1"); 
    hashedPwd = string.Concat(hashedPwd, salt); 
    return hashedPwd; 
} 

я называю выше, как этот

string password = CreatePasswordHash(TxtPassword.Text, "1579"); 

пароль, то становится чем-то вроде этого: 566DAB495AD0747B49865F9177E430DFAD63CA281579

Так как я не-шифровать, что?

Спасибо за ваше время.

+4

Вы не зашифруете. Вы вводите пароль, введенный пользователем, с той же солью, и проверьте, совпадает ли хэш с тем, что вы храните в db. – CodesInChaos

+0

Вы не можете (и не должны) это делать. Причина, по которой люди используют хеши, состоит в том, что их невозможно отменить. – zerkms

+0

Используйте 'Rfc2898DeriveBytes' для хеширования паролей, а не' HashPasswordForStoringInConfigFile' – CodesInChaos

ответ

5

Точка хэша такова, что нет может расшифровать его!

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

+0

каждый может расшифровать его. Проблема заключается в огромной стоимости дешифрования. –

+0

@lukas: bruteforce не является расшифровкой.Расшифровка всегда приводит к известному результату в известное время. – zerkms

8

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

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

Чтобы понять, как это работает, прочитайте мой четыре части серии статей по этой теме:

http://blogs.msdn.com/b/ericlippert/archive/tags/salt/

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

+0

«Найм эксперта» --- ха-ха, если бы только каждый из тех, кто спросил, нанял профессионала вместо того, чтобы делать это сам, - тогда никто не будет задавать вопросы здесь – zerkms

+5

@zerkms: Есть много ситуаций, в которых «учиться, когда идешь», Уместно. В частности, если стоимость совершения ошибки относительно невелика. Строительство систем безопасности не является одним из них. –

+0

@zerkms: Используйте систему членства ASP.NET, и вы наняли целую команду экспертов. Бесплатно. И есть много вопросов, чтобы узнать, как их использовать. –

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