C# 获取密码时的字符串比较

C# 获取密码时的字符串比较,c#,asp.net,.net,asp.net-mvc-3,c#-4.0,C#,Asp.net,.net,Asp.net Mvc 3,C# 4.0,我要问一个非常基本的问题,但因为我遇到了这个问题,我不明白为什么会发生这种情况。通常,当我们比较两个字符串(如s1==s2)时,它会与长度、字符、大小写等进行比较,但在linq中使用以下查询时,它与字符串的大小写不匹配。我的数据库有Password123,但当我输入Password123时,它也会返回一条实际上是错误的记录。 我的问题是: var row=DB.tbllogin.Where(m=>m.Id==LoginId和&m.Password==pwd.Trim()).FirstOrDefa

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

它与案例不匹配。DB中的字段为nvarchar类型,pwd为字符串类型
我使用的是实体框架ORM。

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

一种修复方法是将数据库排序规则更改为区分大小写;现在还不清楚是否可以直接在LINQ中实现这一点。(这是一个细节在抽象中泄露的例子。)


然而,对于这种特殊情况,一个更好的解决方案是不以明文形式存储密码。这是非常不安全的。您应该使用类似于
bcrypt
的方法来存储散列。有关更多详细信息,请参阅。

我认为您的数据库使用的是不区分大小写的排序规则?也许这会有帮助!:)<代码>字符串比较
不起作用。这也被转换为“=”,它不区分大小写。@Jehof:有趣。将删除该位,谢谢。(我保留这个答案是因为“不要像这样存储密码”,即使它大部分是dup。)这至少对实体框架不起作用,我已经在LinqPad中测试过实体框架。我不确定提问者是否使用EF,但我猜他使用了EF。