使用 Bcrypt C# 验证密码无法正常工作

问题描述

我在使用 Bcrypt 包时遇到了一个真正的问题,我有一段 C# 代码可以对密码进行哈希处理并将其保存到数据库中,然后对密码进行哈希处理并使用用户输入的密码进行验证,如果在登录窗口中。

在简单的情况下(不存储在数据库中)工作正常,但是当密码保存在数据库中时,就会出现问题。

var PasswordEncrypted = BCrypt.Net.BCrypt.HashPassword(Password.Password);
userMdl.password = PasswordEncrypted;
bool testAdd = AddUser(userMdl);
if (test) 
{
    //....
}
else 
{
    //......
}

// And then save it to the database 

// Trying to get the password encrypted from the database
if(BCrypt.Net.BCrypt.Verify(passw.Password.ToString(),userMdl.password)
{
    Console.writeLine("Password correct");                   
}

public bool AddUser(usermodel model)
{
    string sqlconnection = GetConnection();
    using (IDbConnection connection = sqlconnection)
    {
        var p = new Dapper.DynamicParameters();
        p.Add("UserId",model.UserID);
        p.Add( "password",model.password);     
        try
        {
            connection.Query<usermodel>("dbo.User_insert",p,null,true,CommandType.StoredProcedure).ToList();
            return true;
        }
        catch (Exception ex)
        {
            GlobalConfig.log.Error("Problem when Add User " + ex.Message);
            return false;
        }
    }
}

注意:

  • 密码的列类型为 Nvarchar(Max),我尝试将其更改为 Char(96),但没有任何变化
  • 散列后的密码显示用户表中。

我做错了什么??

解决方法

感谢@500-InternalServerError的帮助,终于解决了,错误在存储过程,保存前后hash不一样,所以只保存了一些字符,

当我将密码列类型的 nvarchar(55) 更改为 nvarchar(MAX) 并且在插入 SQL 过程中的@password 参数中,它起作用了。