我正在考虑检查用户是否记住他们的密码是区分大小写的,以防他们的密码正确但忘记在密码中使用大写字符。
第一个想法是简单地添加一个带有小写密码哈希的字段并检查(当密码检查失败时)如果插入的小写密码与小写字母匹配
伪代码
if(getpasswordHash(password.toLower()) == databes_lower_hash){
writeMessage("Remember that your password is Case Sensitive")
}
答案 0 :(得分:6)
您正在尝试通过将通常的双状态(通过/失败)方案更改为三状态(通过/失败,但您是接近/失败)方案来帮助用户。你介绍的这种中间状态肯定会降低你的安全性。
这是如何:
说黑客得到一些暗示,我的密码是4个字符。如果他采用纯粹的蛮力方式,那么他必须尝试(26*2)^4
组合。但是一旦你实现了这个,那么只需要(26)^4
组合就可以获得... 请记住,你的密码是区分大小写的 ...消息。从那时起,他必须为每个角色的小/大案件尝试最多2^4
个组合。因此,蛮力障碍显着减少。
您现在必须在数据库中存储两个哈希值。即使您使用不同的盐,无论如何,您仍然要将蛮力障碍减少一半。为了破解密码,黑客现在可以部署两台专门用于破解一个哈希的计算机。有效地将时间缩短了一半。
当然这些都是极端情况。密码永远不允许4个字符长。也会有特殊的字符。军事类黑客很难有机会针对你的应用程序。你看不出有人能偷走你的密码表。但所有这些都可以进行辩论。有社会工程,系统漏洞,甚至你的应用程序都可以吸引严重的黑客。您的应用程序所需要的只是吸引人群。和坏人一起来了。
所以经验法则是:
安全,始终遵循既定规范。其他地方都有地雷。
非常小心地尊重每个人的密码,因为这些是银行保险库本身的密码。
答案 1 :(得分:0)
1。)当然可以。但是到了同样的水平,就像首先只允许小写一样。
3。)将是一个更清洁的解决方案。