Чтобы сохранить пароль пользователя в базе данных для входа в систему, вы должны использовать хеш-функцию с солью.
SHA 256
- один из них, но существуют и лучшие. Я рекомендую вам использовать производную функцию PBKDF2
. Вы можете реализовать свой собственный метод хеширования PBKDF2
, используя класс Rfc2898DeriveBytes
, предоставленный в .NET Framework.
Вот быстрый как это сделать :
int saltSize = 256; // Number of bytes of the salt
int iterations = 1000; // Number of times we iterate the function
// The more we iterate, the more it is gonna take time.
// The advantage of a great iterations number is to
// make brutforce attack more painful.
int hashSize = 20; // Number of bytes of the hash (the output)
var deriveBytes = new Rfc2898DeriveBytes("mypassword", saltSize, iterations);
byte[] salt = deriveBytes.Salt;
byte[] hash = deriveBytes.GetBytes(hashSize);
Вам осталось только сохранить соль и хеш в вашей базе данных. Используйте Convert.FromBase64String
и Convert.ToBase64String
, чтобы получить string
от byte[]
и наоборот.
Другой альтернативой является использование bcrypt
. Смотрите эту интересную статью .