c# – 验证和更改用户密码

我有一个简单的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();

在执行上面的代码时,密码更改但我想:

>检查验证,例如用户是否在当前密码中键入了错误的密码.
> newpassword并确认密码.
>当用户点击第一个保存底部空白密码不应该存储在数据库中,而应该给出消息’请输入密码’

如何才能做到这一点?

解决方法:

你真的不应该用纯文本存储这些密码.您应该散列密码并存储散列.然后,如果要检查密码是否正确,请勾选用户键入的密码,并将其与为用户存储的哈希值进行比较.

但是,听起来您需要帮助从当前用户的数据库中获取值.把这样的东西放在那里,应该为你做这件事.请注意,就像我上面说的那样,这应该是检索密码的哈希值,而不是纯文本中的实际密码.

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
}
上一篇:oracle exp 问题汇总


下一篇:php – 从sha1 salted密码验证用户登录