我找到了一篇有关BCrypt的博客文章,我不确定将硬编码的Salt“ ^ Y8〜JJ”添加到密码中会带来什么好处?
“ hashToStoreInDatabase”包含盐和加密的密码,但不包含硬编码盐“ Y8〜JJ”。因此,如果有人窃取了数据库,则黑客用盐(包含在数据库中)和哈希密码生成自己的Rainbowtable毫无用处,因为他们从未获得硬编码的盐“ 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);
}
答案 0 :(得分:1)
它实际上称为pepper。盐存储在DB中,而胡椒粉存储在DB中。
Wikipedia声明为;
胡椒的作用与盐相当,但是盐不是秘密的(仅是唯一的),可以与哈希输出一同存储,而胡椒是秘密的,因此必须不要与盐一起存储强>。哈希和盐通常存储在数据库中,但但必须将胡椒单独存储(例如在配置文件中),以防止攻击者在数据库遭到破坏时获取它们。
数据库被黑客入侵时,攻击者无法访问Pepper,结果,即使是弱密码也无法进行密码搜索。
简而言之,是的。
但是,Bcrypt很老。应该使用Argon2作为password hashing competition.
的赢家