2011-10-27 29 views
1

私はmd5を送信しているところにJavaコードを持っていて、相手側で受信するソケットを持っています。私は入力としてパスワードを受け取り、自分のmd5を作成して、ソケットを介して認証されたmd5で確認します。MD5文字列の比較

両方のmd5文字列のバイトパターンは同じですが、両方のmd5パターンで同等性テストを実行すると、String.equals()はfalseを返します。どのようにこれを可能にすることができますか?誰かが間違っているかもしれないという考えを持っているなら、助けてください?

+0

いくつかのコードを表示してください。 – chzbrgla

+0

"両方のmd5文字列が同じバイトパターンを持つ"という意味を明確にすることはできますか?これをどうやって決めますか? –

+0

本当に 'String.equals()'を使っていますか?例えば 'char []。equals()'を呼び出すのではないのですか? –

答えて

4

MD5はbyte[]です。その表現は、通常はの16進文字列です。見て物事:

  • あなたは16進文字列を構築する方法は、あなたがnew String(bytes)を使用していないことを確認してください
  • 同じである必要があります。これはマシン間で異なるデフォルトのエンコーディングを使用し、エンコーディングはいくつかのバイト値をサポートしないかもしれません。
  • 文字が同じ場合(上/下)

を持つ必要がありますしかし、あなたは表現を比較するべきではありません。あなたはバイトを比較する必要があります:Arrays.equals(ar1, ar2)

+0

うまく動作するかどうか試してみてください。ありがとう:) – RazrBos

+0

これは解決策だと思われますが、なぜ私は16進数の文字列を比較する文字列を行うと、バイトを比較する必要があります説明することができますか? – RazrBos

+1

16進文字列は単に配列の表現です。わずかに異なるアルゴリズムで生成された場合、同じバイト配列の出力が異なる場合があります。 – Bozho