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