Я нашел сообщение в блоге о BCrypt, и я не уверен, что является преимуществом добавления жестко закодированной соли «^ Y8 ~ JJ» к паролю?
«hashToStoreInDatabase», содержащая сольи зашифрованный пароль, но не жестко запрограммированная соль Y8 ~ JJ.Итак, если кто-то украдет базу данных, для хакера бесполезно сгенерировать собственную радужную таблицу с солью (содержащейся в базе данных) и хешированным паролем, потому что они никогда не получат жестко запрограммированную соль 'Y8 ~ JJ'.
(я знал, что уже безопасно сохранять соль и хеш-пароль, поскольку генерирование радуги требует больших затрат)
Рекомендуется ли использовать BCrypt?
Цитата из: https://www.codeproject.com/articles/475262/useplusbcryptplustoplushashplusyourpluspasswords
private void SetPassword(string user, string userPassword)
{
string pwdToHash = userPassword + "^Y8~JJ"; // ^Y8~JJ is my hard-coded salt
string hashToStoreInDatabase = BCrypt.HashPassword(pwdToHash, BCrypt.GenerateSalt());
using (SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection(...)
{
sqlConn.Open();
SqlCommand cmSql = sqlConn.CreateCommand();
cmSql.CommandText = "UPDATE LOGINS SET PASSWORD=@parm1 WHERE USERNAME=@parm2";
cmSql.Parameters.Add("@parm1", SqlDbType.Char);
cmSql.Parameters.Add("@parm2", SqlDbType.VarChar);
cmSql.Parameters["@parm1"].Value = hashToStoreInDatabase;
cmSql.Parameters["@parm2"].Value = user;
cmSql.ExecuteNonQuery();
}
}
private bool DoesPasswordMatch(string hashedPwdFromDatabase, string userEnteredPassword)
{
return BCrypt.CheckPassword(userEnteredPassword + "^Y8~JJ", hashedPwdFromDatabase);
}