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

时间:2014-07-16 07:18:04

标签: c# winforms textbox sql-server-2008-r2

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

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

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

3 个答案:

答案 0 :(得分:1)

没有什么特别要做,但你绝对应该避免:

  • 以明确方式存储密码
  • 使用简单的哈希,例如没有盐的MD5(即散列时引入了一定数量的可变性)

一种方法是将帐户中最后一次密码更改的日期(例如64位整数)与散列一起存储(类似SHA1应该是合理的)。当用户连接时,表单被赋予数字(称为'salt'),表单将salt与输入的密码(使用预定义的编码,如UTF8)打包,并在其上生成哈希值,并在例如,wire as base64(我的意思是你的密码字段可能只是一个包含base64编码哈希的文本字段)。如果与服务器(数据库或应用程序)的通信是安全的,则密码可以在线路上传输没问题。服务器比较两个哈希值,如果匹配就可以了。

盐的原因是根据预先构建的MD5字典或SHA密码与您的密码数据库匹配(如果碰巧被黑客下载),大大减慢了攻击速度。如果连接可以被黑客读取,它也会有所帮助,因为相同的预建字典攻击可以对通过线路的MD5哈希进行处理。

答案 1 :(得分:0)

您可以使用正则表达式

 ^(?=(.*\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

Demo Link

答案 2 :(得分:0)

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

if(StringA == StringB) 

本身在C#中区分大小写。