Я довольно новичок в криптографии и хочу, чтобы моя голова вокруг алгоритмов хеширования.Хэш-алгоритм SHA256, мой метод защищен? Как добавить значение соли, чтобы сделать его более безопасным
У меня есть источники для создания хешированной версии пароля, который может быть сохранен в моей базе данных.
public static string hashPasswordGenerator(string password)
{
System.Security.Cryptography.SHA256Managed crypt = new System.Security.Cryptography.SHA256Managed();
StringBuilder hash = new StringBuilder();
byte[] cry = crypt.ComputeHash(Encoding.UTF8.GetBytes(password), 0, Encoding.UTF8.GetByteCount(password));
return Convert.ToBase64String(cry);
}
Мой пример пользователь User1
с паролем Password1
, это возвращает версию хэшированного GVE/3J2k+3KkoF62aRdUjTyQ/5TVQZ4fI2PuqJ3+4d0=
Мои вопросы:
- Является ли это безопасно?
- Должен ли я добавить соль к этому? Если да, то кто-нибудь может показать мне простой пример, так как я действительно не понимаю, как его соль сгенерирована так, чтобы каждый раз она соответствовала паролю?
- Если у кого-то есть этот метод hashPasswordGenerator, они могут перепроектировать мой пароль?
Заранее спасибо.
В вашем примере 'StringBuilder hash = new StringBuilder();' никогда не используется. – Ashigore
Возможный дубликат [Является ли SHA-1 безопасным для хранения паролей?] (Http://stackoverflow.com/questions/2772014/is-sha-1-secure-for-password-storage) (SHA-256 и SHA-1 не являются принципиально разными) –
Вы никогда не должны использовать простую хэширующую функцию для хэширования паролей. Вам нужно использовать намеренно медленную функцию хеширования, такую как PBKDF2, bcrypt, scrypt и Argon2. Подробнее: [Как безопасно использовать хэш-пароли?] (Http://security.stackexchange.com/q/211/45523) –