同一字符串的hashCode不同



我制作了一个登录屏幕,希望检查客户端在服务器数据库中输入的密码和密码。如果它们的HashCodes匹配,则接受密码。然而,当我在客户端屏幕上写密码时,我得到的HashCode与服务器端收到的字符串(密码)的HashCode不同。

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

您误解了。

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

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

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

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

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

这是个谜。如果您使用的是String.hashCode(),唯一可能的解释是您正在散列不同的字符串;例如,一个空格中可能有前导/尾随空格,而另一个空格则没有,或者其中一个空格被添加了"种子"进行了哈希处理。我想,另一种可能的解释可能是你正在哈希StringBufferStringBuilderchar[]或其他什么。

最新更新