【发布时间】:2019-05-22 03:56:30
【问题描述】:
我发现了一篇关于 BCrypt 的博文,但我不确定在密码中添加硬编码的 Salt "^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);
}
【问题讨论】:
标签: cryptography bcrypt salt