我制作了一个登录屏幕,希望检查客户端在服务器数据库中输入的密码和密码。如果它们的HashCodes匹配,则接受密码。然而,当我在客户端屏幕上写密码时,我得到的HashCode与服务器端收到的字符串(密码)的HashCode不同。
有人知道为什么吗?提前感谢您的任何见解。
您误解了。
- 您应该使用安全散列,而不是
hashCode()
方法 - 不得将明文密码存储在数据库中。您必须存储哈希
-
你应该让数据库进行哈希和比较:
SELECT COUNT(*) FROM USERS WHERE USERNAME = ? AND PASSWORD = MD5(?)
如果此查询返回1,则用户和密码存在。如果它返回零,他们不会。还要注意的是,您不想区分错误的用户名和错误的密码,因为这是对攻击者的信息泄露。如上所述,一起测试它们。
@EJP已经(正确地)指出,您应该使用安全散列函数,而不是Java hashCode
。
然而,当我在客户端屏幕上写密码时,我得到的HashCode与服务器端收到的字符串(密码)的HashCode不同。
这是个谜。如果您使用的是String.hashCode()
,唯一可能的解释是您正在散列不同的字符串;例如,一个空格中可能有前导/尾随空格,而另一个空格则没有,或者其中一个空格被添加了"种子"进行了哈希处理。我想,另一种可能的解释可能是你正在哈希StringBuffer
、StringBuilder
、char[]
或其他什么。