【问题标题】:Comparing MD5 strings比较 MD5 字符串
【发布时间】:2011-10-27 15:08:52
【问题描述】:

我有一个 java 代码,我在其中发送一个 md5,它通过套接字在另一端接收。我将密码作为输入并创建自己的 md5 以检查通过套接字接收到的 md5 以进行身份​​验证。

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

【问题讨论】:

  • 您能澄清一下“两个 md5 字符串具有相同的字节模式”是什么意思吗?你如何确定这一点?
  • 您是否真的在使用String.equals(),而不是例如调用char[].equals()
  • 我做了一个新的字符串(md5字节数组)。然后使用 String.equals() 比较两个字符串。 “两个 md5 具有相同的字节模式”我的意思是,当我对两个 md5 字符串执行 string.getBytes() 时,我在 eclipse 中看到相同的字节值。
  • 这里是代码链接:pastebin.com/BtfvMhSi

标签: java string md5


【解决方案1】:

MD5 是byte[]。它的表示通常是一个十六进制字符串。要看的东西:

  • 你构造十六进制字符串的方式应该是一样的
  • 确保您没有使用new String(bytes)。这使用默认编码,该编码因机器而异,并且编码可能不支持某些字节值。
  • 字母应具有相同的大小写(小写/大写)

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

【讨论】:

  • 会试一试,看看它是否有效,应该有希望。谢谢:)
  • 这似乎是解决方案,但是您能解释一下为什么我不能对十六进制字符串进行字符串比较并且应该始终比较字节吗?
  • 十六进制字符串只是数组的表示。并且如果是由稍微不同的算法生成的,同样的字节数组的输出可能会有所不同
  • 默认 md5 为您提供字节。你如何得到字符串?
  • 是的,这很糟糕。它不产生十六进制。它根据默认编码产生一些东西。这可能正在改变。或者可能无法映射某些字节。
猜你喜欢
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
相关资源
最近更新 更多