微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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 参数中,它起作用了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。