2011-01-05 7 views
1

チェックサム付きのビッグエンディアン形式のバイト配列データを受け取りました。私は次のコードを使用してチェックサムを作成しました。MD5 Javaのチェックサム問題

public static byte[] createChecksum(byte buffer[], int len){ 
    MessageDigest complete = MessageDigest.getInstance("MD5"); 
    complete.update(buffer,0,len); 
    return complete.digest(); 
} 

データでチェックサムをチェックしているときに、一致しません。私はデータをチェックした。データが破損していないか間違っていません。私はまた、中央の1バイトだけが2つのチェックサムの間でマッチングしていないことも発見しました。

+0

どのようにmd5チェックサムを比較していますか? –

+0

チェックサムにはデータが付いています。 – Kamahire

+2

チェックサムが正確に同じ方法で計算されていないと思われます。 BTW:バイトは常にバイトですが、エンディアンはありません。チェックサムを間違って読んでいる可能性はありますか? –

答えて

0

あなたの方法は正しいようです。

バイト配列を取得して後で16進数に変換する必要があるので、望ましくない結果が得られるかもしれませんか?どのファイルをハッシュしているのか、どのような結果が得られているかの例を書くことができますか?

入力バイト配列が正しいエンコーディングを持っていることを確認しましたか?末尾の行やスペースなどに注意してください。

0

考えられる理由:

  • あなたが 'LEN' パラメータ

しかし、次の

を読み間違ったバッファ
  • に全体の内容を読んでいません

    私はまた、真ん中の1バイトだけが賭けとマッチしていないことを発見しました2つのチェックサムを捨てる。

  • 私は結果としてMD5(または/はそれを送受信するもの)をチェックする機能にエラーがあると信じています。 まあ、例外的に不可能な(1バイトの違いのみ)md5のハッシュ関数については、それが間違いなくsnd/rcvへの間違いであり、結果コードの比較に間違いがあります。

    サイドノート:ビッグエンディアン/リトルエンディアンは、1バイト以上を要する 'プリミティブ'を表現する場合にのみ意味があります。

    +0

    私は提供しているlenとチェックしました。私はチェックサムを作成するために提供しているデータ配列をchckします。 – Kamahire

    +0

    md5をチェックするコード(snd/rcv)はどうですか? – bestsss

    +0

    データサイズがわずか42バイトであるため、私は手動でチェックしました。 – Kamahire