gpt4 book ai didi

c# - BCrypt.Net 库中的无效盐版本错误 - 带有 MySQL DB 的 WinForms/C# 应用程序

转载 作者:行者123 更新时间:2023-11-29 05:53:13 31 4
gpt4 key购买 nike

我目前正在制作一个密码管理器,因此我制作了一个包含用户名和密码字段的登录表单。我想 bcrypt 密码。我将 salt 和散列密码存储在数据库中 ( screenshot 1 )。当用户输入他们的用户名和密码时,我所做的是:

1.从数据库中检索盐并使用 BCrypt.Net.BCrypt.HashPassword(password.Text, sal) 方法将提交的密码与数据库中的盐进行哈希运算

2.从数据库表中获取原始的散列密码,然后使用方法BCrypt.Net.BCrypt.Verify(submhash, passdb)检查是否2 个密码哈希匹配。

3.如果匹配,我打开程序的主窗体。

但是 VS Studio 抛出异常:无效的盐版本 ( screenshot 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++;

}

}

最佳答案

首先,您应该将 MySqlCommand 包装在 using 语句中,因为 DbCommand 实现了 IDisposable。

关于您的 BCrypt 问题。

您不必创建新的散列并将其与保存的散列值进行比较。因为每次你这样做你都会得到一个不同的散列。您只需使用 BCrypt.Net 根据保存的哈希值验证密码。

所以下面应该可以工作

if (BCrypt.Net.BCrypt.Verify(password.Text, passdb))
{
// logged in
}
// not logged in

我希望 passdb 拥有如下所示的 bcrypt 哈希:

$2a$12$VvDRKYKGt4Zd2Ux35LeG2OI.Vr5f.UuY2q7MrnHlJj4K5diifQV3e

关于c# - BCrypt.Net 库中的无效盐版本错误 - 带有 MySQL DB 的 WinForms/C# 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52276841/

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