C# 验证密码是否已赢得';使用Bcrypt C无法完美工作#

C# 验证密码是否已赢得';使用Bcrypt C无法完美工作#,c#,sql-server,bcrypt,C#,Sql Server,Bcrypt,我面临着Bcrypt软件包的一个真正问题,我有一段C#代码,它将对密码进行散列并保存到数据库中,然后对密码进行散列,并在登录窗口中使用用户输入的密码进行验证 在简单的情况下(不存储在数据库中)可以正常工作,但当密码保存在数据库中时,会导致问题 var PasswordEncrypted=BCrypt.Net.BCrypt.HashPassword(Password.Password); userMdl.password=密码加密; bool testAdd=AddUser(userMdl); 如

我面临着Bcrypt软件包的一个真正问题,我有一段C#代码,它将对密码进行散列并保存到数据库中,然后对密码进行散列,并在登录窗口中使用用户输入的密码进行验证

在简单的情况下(不存储在数据库中)可以正常工作,但当密码保存在数据库中时,会导致问题

var PasswordEncrypted=BCrypt.Net.BCrypt.HashPassword(Password.Password);
userMdl.password=密码加密;
bool testAdd=AddUser(userMdl);
如果(测试)
{
//....
}
其他的
{
//......
}
//然后将其保存到数据库中
//正在尝试从数据库中加密密码
if(BCrypt.Net.BCrypt.Verify(passw.Password.ToString(),userMdl.Password)
{
Console.writeLine(“密码正确”);
}
公共bool AddUser(UserModel)
{
字符串sqlconnection=GetConnection();
使用(IDbConnection=sqlconnection)
{
var p=新的Dapper.DynamicParameters();
p、 添加(“UserId”,model.UserId);
p、 添加(“密码”,型号.密码);
尝试
{
Query(“dbo.User_insert”,p,null,true,null,CommandType.StoredProcedure).ToList();
返回true;
}
捕获(例外情况除外)
{
GlobalConfig.log.Error(“添加用户时出现问题”+ex.Message);
返回false;
}
}
}
注:

  • 密码的列类型是
    Nvarchar(Max)
    ,我尝试将其更改为
    Char(96)
    ,但没有任何更改
  • 哈希密码显示在用户的表中

我做错了什么???

多亏@500 InternalServerError的帮助,我终于解决了它,错误在存储过程中,保存前和保存后的哈希不一样,所以它只保存了一些字符


当我将密码列类型的
nvarchar(55)
更改为
nvarchar(MAX)
时,在insert SQL过程中@password的参数中,它可以工作。

(提醒:哈希不是加密。)“如果你没有显示任何正在进行存储和检索的代码,很难说你做错了什么,这可能就是问题所在。”弗兰兹格莱奇曼感谢你的评论,我编辑了我的问题,将保存到数据库之前的哈希值与你回读时得到的哈希值进行比较。当然,它们应该是相同的。@500-如果发生错误,我将尝试此操作