我正在创建一个聊天程序,我正在使用mysql数据库来处理所有用户的登录信息。登录非常简单。数据库中的密码是SHA256,最后用盐进行哈希处理。我需要从数据库中检索salt并使用输入的密码对其进行哈希以查看它是否与数据库中的密码匹配,如果匹配,则用户将登录。但是我在检索盐时遇到了麻烦。我试图检索的盐的一个例子是:
q'³SÁ(-¤Lí~ÕEÁÞf - ]'>š²ìs®§“
。我能成功检索的就是:
q'³SÁ(-¤Lí~ÕEÁ
这是我检索盐的代码:
private void GetSalt()
{
try
{
MySqlConnection conn = new MySqlConnection(GlobalData.MySQLConnectionString);
MySqlCommand saltQuery = conn.CreateCommand();
saltQuery.CommandText = "SELECT salt FROM users WHERE email = @email";
saltQuery.Parameters.AddWithValue("@email", this._enteredEmail);
conn.Open();
MySqlDataReader saltReader = saltQuery.ExecuteReader();
while (saltReader.Read())
{
this._salt = saltReader.GetString("salt");
}
}
catch (MySqlException ex)
{
throw ex;
}
}
知道为什么我无法取回全盐吗?
P.S .->所有用户信息都是通过网站创建的,并使用PHP进行哈希处理。我不知道这是否是必要的信息。
答案 0 :(得分:0)
我建议使用BCrypt.Net库,它不仅提供了适当的密码散列算法,还处理安全盐的生成。由于salt将包含在生成的哈希值中,因此数据库中不需要单独的字段。
快速哈希算法(如MD5,SHA-1甚至SHA-256)是不哈希密码的良好选择,因为它们太快,因此太容易暴力破解。相反,应该使用像BCrypt或PBKDF2这样的慢速密钥派生函数和成本因子。
* Natural Planning Model
** ITEM 1
*** Purpose and Principles (Why)
*** Outcome Visioning
*** Brainstorming
*** Organizing
*** Identifying next actions
** ITEM 2...
** ITEM 3...