以区分大小写的方式验证密码
本文关键字:方式 验证 密码 大小写 | 更新日期: 2023-09-27 18:13:05
我在我的项目中有一个登录表单,它接受用户名和密码来验证和前进。
我使用SQL Server作为后端。最初在我的登录页面,如果我在大写字母或小写字母输入密码,它验证我的登录页面,并继续与项目。但是现在我想在我的密码文本框中添加区分大小写的密码验证,以便它与数据库中密码字符的确切顺序相匹配。
如何将此验证添加到密码字段。可以在登录表单或SQL Server中添加吗?
没有什么特别要做的,但是你一定要避免:
- 在clear 中存储密码
- 使用简单的哈希,如MD5,没有一些盐(即在哈希时引入一些可变性)
这样做的一种方法是将最后一次密码更改的日期(例如64位的整数)与哈希(类似SHA1的东西应该是合理的)一起存储在帐户中。当用户连接时,表单将获得一个数字(称为"salt"),表单将输入的密码(在预定义的编码中,如UTF8)打包成盐,并在其上产生一个哈希值,并将其作为base64传输到网络上(我的意思是您的密码字段可能只是一个包含base64编码哈希值的文本字段)。如果与服务器(数据库或应用程序)的通信是安全的,那么密码可以在线路上传输,没有问题。服务器比较两个哈希值,如果它们匹配,则OK。
使用salt的原因是为了极大地减缓基于预先构建的MD5或SHA哈希字典的攻击,这些字典与您的密码数据库相匹配(如果它碰巧被黑客下载)。如果连接可以被黑客读取,这也会有所帮助,因为同样的预构建字典攻击可以对通过网络传递的MD5哈希值起作用。
可以使用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
演示链接正如其他人所提到的,将密码存储为纯文本不是好的做法。如果这是你被要求做的,
if(StringA == StringB)
本身在c#中是区分大小写的。