不同的hashCode是否为同一个字符串?

时间:2015-03-21 01:17:54

标签: java hashmap passwords client-server hashcode

我已经创建了一个登录屏幕,并希望检查客户端在服务器数据库中输入密码的密码。如果他们的HashCodes匹配,则接受密码。但是,当我在客户端屏幕上写入密码时得到的HashCode与服务器端收到的字符串(密码)的HashCode不同。

有人知道为什么吗?提前感谢任何见解。

2 个答案:

答案 0 :(得分:0)

你误解了。

  1. 您应该使用安全哈希,而不是hashCode()方法。
  2. 不得将明文密码存储在数据库中。您必须存储哈希。
  3. 您应该让数据库进行散列和比较:

    SELECT COUNT(*) FROM USERS WHERE USERNAME = ? AND PASSWORD = MD5(?) 
    

    如果此查询返回1,则表示存在用户和密码。如果它返回零,他们就不会。另请注意,您不想区分错误的用户名和错误的密码,因为这是向攻击者泄露的信息。如上所述一起测试它们。

答案 1 :(得分:0)

@EJP已经(正确地)指出你应该使用安全散列函数而不是Java hashCode

  

但是,当我在客户端屏幕上写密码时得到的HashCode与服务器端收到的字符串(密码)的HashCode不同。

这是一个难题。如果您使用String.hashCode(),唯一可能的解释是您正在散列不同的字符串;例如在一个而不是另一个中可能存在前导/尾随空白区域,或者可能有一个被添加到其中的“种子”进行了散列。我想,另一种可能的解释可能是您正在对StringBufferStringBuilderchar[]或其他内容进行哈希处理。