获取密码时的字符串比较

时间:2014-01-27 06:52:08

标签: c# asp.net .net asp.net-mvc-3 c#-4.0

我会问一个非常基本的问题,但是因为我遇到了这个问题而且我不明白为什么会发生这种情况。通常当我们比较两个字符串如s1 == s2时,它会与长度,字符,大小写等进行比较,但在linq中使用以下查询时,它与字符串的大小写不匹配。我的DB有Password123,但是当我输入password123时,它也会返回一条实际上错误的记录。 我的查询是:  var row = DB.tbllogin.Where(m => m.Id == LoginId && m.Password == pwd.Trim()).FirstOrDefault();

与案例不匹配.DB中的字段为nvarchar类型,pwd为字符串类型 我正在使用Entity Framework ORM。

1 个答案:

答案 0 :(得分:5)

问题是比较是在SQL中执行的 - 我怀疑如果你在SQL Studio中执行相同的查询,你会得到相同的结果。

一种解决方法是将数据库排序规则更改为区分大小写;目前还不清楚你是否可以直接在LINQ本身中这样做。 (这是细节通过抽象泄漏的情况之一。)

但是,针对此特定案例的更好解决方案是不以明文形式存储您的密码以开头。这是非常不安全的。您应该使用bcrypt之类的内容存储哈希。有关详细信息,请参阅Jeff Atwood's blog post on the topic