C# 以区分大小写的方式验证密码

C# 以区分大小写的方式验证密码,c#,winforms,textbox,sql-server-2008-r2,C#,Winforms,Textbox,Sql Server 2008 R2,我在我的项目中有一个登录表单,它接受用户名和密码进行验证并继续 我使用SQL Server作为后端。最初在我的登录页面中,如果我以大写字母或小写字母输入密码,它将验证我的登录页面并继续项目。但是现在我想将区分大小写的密码验证添加到我的密码文本框中,以便它与数据库中密码字符的确切顺序相匹配 如何将此验证添加到密码字段。可以将其添加到登录表单或SQL Server中吗?您可以使用regex ^(?=(.*\d){2})(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z\d]).

我在我的项目中有一个登录表单,它接受用户名和密码进行验证并继续

我使用SQL Server作为后端。最初在我的登录页面中,如果我以大写字母或小写字母输入密码,它将验证我的登录页面并继续项目。但是现在我想将区分大小写的密码验证添加到我的密码文本框中,以便它与数据库中密码字符的确切顺序相匹配

如何将此验证添加到密码字段。可以将其添加到登录表单或SQL Server中吗?

您可以使用regex

 ^(?=(.*\d){2})(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z\d]).{8,}$
        ---------  --------------------- --------------- -----
            |               |                    |          |->match 8 or more characters
            |               |                    |->match further only if theres anything except letter or digit
            |               |->match further only if there is an upper-lower case letter
            |
            |->match further only if there are two digits any

where

没有什么特别的事情要做,但是你一定要避免:

  • 在clear中存储密码
  • 使用简单的散列,如MD5,但不含盐(即,散列时引入了一定数量的可变性)
一种方法是将上一次密码更改的日期(例如64位的整数)与散列一起存储在帐户中(类似SHA1的内容应该是合理的)。当用户连接时,表单被赋予数字(称为“salt”),表单使用键入的密码(以预定义的编码,如UTF8)打包salt,并在其上生成一个散列,然后将其作为base64(例如,我的意思是您的密码字段可能只是包含base64编码散列的文本字段)在线路上传输。如果与服务器(数据库或应用程序)的通信是安全的,则密码可以在线路上传输,没有问题。服务器比较这两个散列,如果它们匹配就可以了


使用salt的原因是,根据预先构建的MD5或SHA哈希字典与您的密码数据库相匹配(如果它碰巧被黑客下载),大大降低了攻击速度。如果连接可以被黑客读取,这也会有所帮助,因为同样的预构建字典攻击可能会对通过网络传输的MD5哈希产生影响。

正如其他人所提到的,将密码存储为纯文本不是一种好的做法。如果你被要求这么做

if(StringA == StringB) 

在C#中本身区分大小写

如何验证密码字段?密码是如何存储的,您是否计算了哈希值?密码字段将使用数据库中存储的数据进行验证。密码字段上未添加其他验证@Dhaval PatelYou不应该在数据库中以明文形式存储密码。但要进行区分大小写的数据库比较,请指定一个。我猜这是一个学校项目?如果不是,并且是针对一个网站,请告诉我地址,这样我就永远不会在你的网站注册,直到你对密码进行某种哈希:)我不知道这是一个笑话还是一个错误的问题