我有一个简单的C#窗体,用作登录,但也有一个表单来更改用户的密码。
当您点击更改密码时,表单会加载一个包含当前密码,新密码和确认新密码的文本框,以及一个保存按钮。
我已经在标签中存储了用户名,这样可以检查当前密码是否在数据库中有效。
我将这些存储在我在Microsoft SQL Server 2008中创建的表中。
到目前为止,代码如下。
SqlConnection connect = new SqlConnection(str);
connect.Open();
string username = label_username.Text;
string password = textBox_Current.Text;
string newPassword = textBox_New.Text;
string confirmPassword = textBox_Verify.Text;
string sqlquery = "UPDATE [Member] SET Password=@newpass where Username=@username";
SqlCommand cmd = new SqlCommand(sqlquery, connect);
cmd.Parameters.AddWithValue("@newpass", textBox_Verify.Text);
cmd.Parameters.AddWithValue("@username", label_username.Text);
cmd.Parameters.AddWithValue("@password", textBox_Current.Text);
cmd.Connection = connect;
cmd.ExecuteNonQuery();
sqlDataReader reader = null;
reader = cmd.ExecuteReader();
while (reader.Read())
{
if ((textBox_New.Text == reader["newPassword"].ToString()) & (textBox_Verify.Text == (reader["confirmPassword"].ToString()))) { }
}
MessageBox.Show("Password Changed Successfully!");
this.Close();
执行上面的代码时,密码更改但我想:
如何做到这一点?
答案 0 :(得分:3)
您真的不应该以纯文本格式存储这些密码。您应该散列密码并存储散列。然后,如果要检查密码是否正确,请勾选用户键入的密码,并将其与为用户存储的哈希值进行比较。
但是,听起来您需要帮助从当前用户的数据库中获取值。把这样的东西放在那里,应该为你做这件事。请注意,就像我上面说的那样,这应该是检索密码的哈希值,而不是纯文本中的实际密码。
string sqlquery = "SELECT Password FROM [Member] where Username=@username";
SqlCommand cmd = new SqlCommand(sqlquery, connect);
cmd.Parameters.AddWithValue("@username", label_username.Text);
cmd.Connection = connect;
string currentPassword = (string)cmd.ExecuteScalar();
if (currentPassword == textBox_Current.Text)
{
// PASSWORD IS CORRECT, CHANGE IT, NOW.
} else {
// WOW EASY BUDDY, NOT SO FAST
}
答案 1 :(得分:0)
首先,您应该在应用程序中使用密码哈希,因此数据库的密码字段应该包含哈希值。
假设这样,为了实现目标,
您还应按以下顺序执行这些任务:
1 - > 3 - > 2
希望这会有所帮助......
答案 2 :(得分:0)
protected void btn_PasswordChange(object sender, EventArgs e)
{
string constring = DataAccess.GetConnection();
SqlConnection con = new `SqlConnection`(constring);
{
if (con.State != ConnectionState.Open)
con.Open();
}
string str = "select * from tbl_MemberLogin where Password='" + txtoldpwd.Text + "'";
DataTable DT = new DataTable();
DT = objdut.GetDataTable(str);
if (DT.Rows.Count == 0)
{
lblmsg.Text = "Invalid current password";
lblmsg.ForeColor = System.Drawing.Color.Red;
}
else
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "update tbl_MemberLogin set Password='" + txtnewpwd.Text + "' where UserName='" + Session["UserName"].ToString() + "'";
cmd.ExecuteNonQuery();
lblmsg.Text = "Password changed successfully";
lblmsg.ForeColor = System.Drawing.Color.Green;
}
}