В настоящее время я делаю менеджер паролей, поэтому я делаю форму входа в систему с полями имени пользователя и пароля. Я хочу bcrypt
пароль. Я храню соль и хешированный пароль в базе данных ( снимок экрана 1 ). Когда пользователь вводит свое имя пользователя и пароль, я делаю следующее:
1. Извлеките соль из БД и используйте метод BCrypt.Net.BCrypt.HashPassword(password.Text, sal)
, чтобы хэшировать представленный пароль с солью из базы данных
2. Извлеките исходный хэшированный пароль из таблицы БД, а затем используйте метод BCrypt.Net.BCrypt.Verify(submhash, passdb)
, чтобы проверить, совпадают ли 2 хэша паролей.
3. Если они совпадают, я открываю основную форму программы.
Однако VS Studio выдает исключение: Недопустимая соленая версия ( снимок экрана 2 )
Я хотел бы спросить, в чем проблема и как ее исправить?
conn.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.Parameters.AddWithValue("@usr", username.Text);
// cmd.Parameters.AddWithValue("@pas", password.Text);
cmd.CommandText = "select password from users where username = @usr";
passdb = (string)cmd.ExecuteScalar();
MySqlCommand ss = new MySqlCommand();
ss.Connection = conn;
ss.Parameters.AddWithValue("@uun", username.Text);
ss.CommandText = "select salt from users where username = @uun";
sal= (string)ss.ExecuteScalar();
submhash = BCrypt.Net.BCrypt.HashPassword(password.Text, sal);
MySqlCommand com = new MySqlCommand();
com.Connection = conn;
com.Parameters.AddWithValue("@unm", username.Text);
if (BCrypt.Net.BCrypt.Verify(submhash, passdb))
{
frmMain fm = new frmMain();
SesUser.username = username.Text;
SesUser.password = password.Text;
this.Hide();
fm.Show();
}
else
{
MessageBox.Show("Username or password is incorrect!","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
i++;
}
}