2011-10-27 57 views
1

我有一个java代码,我发送的md5已经通过套接字在另一端接收。我输入一个密码作为输入,并创建它自己的md5来检查通过套接字接收的md5进行身份验证。比较MD5字符串

这两个md5字符串都有相同的字节模式,但是当我对两个md5模式进行相等性测试时,String.equals()返回false。这怎么可能 ?。如果有人知道什么可能是错误的,请帮助。

+0

请显示一些代码。 – chzbrgla

+0

你能澄清你的意思吗“两个md5字符串都有相同的字节模式”?你如何确定这一点? –

+0

你真的在使用'String.equals()',而不是,例如调用'char []。equals()'? –

回答

4

MD5是byte[]。它的表示是通常是一个十六进制字符串。事情查看:

  • 您构建十六进制字符串应该是相同的
  • 确保您使用的不是new String(bytes)的方式。这使用默认的编码,这在机器间是不同的,编码可能不支持一些字节值。
  • 字母应该有相同的情况下(低/上)

但你不应该比较代表性。您应该比较字节:Arrays.equals(ar1, ar2)

+0

将试一试,看看它是否有效,应该有希望工作。谢谢:) – RazrBos

+0

这似乎是解决方案,但你能解释为什么我不能做一个字符串比较一个十六进制字符串,应该总是比较字节? – RazrBos

+1

十六进制字符串只是数组的表示形式。如果它是由稍微不同的算法产生的,则相同字节数组的输出可能不同 – Bozho