gpt4 book ai didi

c# - BCrypt 根据数据库中的密码验证密码

转载 作者:行者123 更新时间:2023-11-29 19:16:08 26 4
gpt4 key购买 nike

我正在尝试验证数据库中已使用 BCrypt 进行哈希处理的哈希密码。

我有两个 Web 表单,一个登录页面和一个注册页面。

在注册页面中,我创建哈希值,验证哈希值并将其插入数据库。工作正常。

在登录页面中,我从数据库中选择散列密码,并将其与文本框中提交的密码进行比较。

在根据提交的密码验证数据库中的哈希值时,我似乎遇到了问题,我不知道出了什么问题。

以下是注册页面代码:

protected void registerbutton_Click(object sender, EventArgs e)
{
string myPassword = passwordtextbox.Text;
string mySalt = BCryptHelper.GenerateSalt();
string myHash = BCryptHelper.HashPassword(myPassword, mySalt);
bool doesPasswordMatch = BCryptHelper.CheckPassword(myPassword, myHash);


if (doesPasswordMatch == true)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
using (SqlCommand cmd = new SqlCommand("INSERT INTO dbo.Users (Username, Password, FirstName, LastName) VALUES (@username, @password, @firstname, @lastname)", conn))
{
cmd.Parameters.Add("@username", SqlDbType.NVarChar).Value = usernametextbox.Text;
cmd.Parameters.Add("@password", SqlDbType.Char).Value = myHash;
cmd.Parameters.Add("@firstname", SqlDbType.NVarChar).Value = firstnametextbox.Text;
cmd.Parameters.Add("@lastname", SqlDbType.NVarChar).Value = lastnametextbox.Text;

conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

registerlabel3.Text = myHash;


}
}
else
{
registerlabel3.Text = "Error";
}
}

这是登录页面代码:

protected void loginbutton_Click(object sender, EventArgs e)
{
const string query = "SELECT Username, Password FROM dbo.Users WHERE Username = @username";

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
using (SqlCommand cmd = new SqlCommand(query, conn))
{
cmd.Parameters.Add("@username", SqlDbType.NVarChar).Value = usernametextbox.Text;
conn.Open();

//string hashedPassword = BCrypt.Net.BCrypt.HashPassword(passwordtextbox.Text);

using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var passwordInDb = reader.GetString(1);

Label3.Text = "submitted = " + passwordtextbox.Text;
Label4.Text = "database hash = " + passwordInDb;

if(BCryptHelper.CheckPassword(passwordtextbox.Text, reader.GetString(1)))
{
//login
loginlabel.Text = "Success";
}
else
{
loginlabel.Text = "Error";
}




}
}
}
}

感谢帮助和反馈。

最佳答案

写入数据库时​​,尝试:

protected void registerbutton_Click(object sender, EventArgs e)
{
....
cmd.Parameters.Add("@password", SqlDbType.NVarChar).Value = myHash;
....
}

关于c# - BCrypt 根据数据库中的密码验证密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42694380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com