11

これは正確に何をしますか?調べてみましたが、何も見つかりませんでした。

byte[]質問の理由は、ハッシュされる値にSALT を組み込みたいからです。したがって、次のようにする必要があります(疑似コード):

MessageDigest.update(SALT);
MessageDigest.update(value);
digestValue = MessageDigest.digest();
// Where SALT, value and digestValue are array bytes, byte[]

SALTこれは と の両方をvalue最終ダイジェストに追加しますか、それとも両方の変数を 1 つに結合してから 1update回結合する必要がありますか?

どのドキュメントにもこれに対する答えが見つかりませんでした。説明をいただければ幸いです。

ありがとう、乾杯。

4

1 に答える 1

13

MessageDigestはステートフルです。 の呼び出しは、MessageDigest.update(byte[] input)を呼び出すまでダイジェストの更新を蓄積しますMessageDigest.digest。このテストを実行して、次のことを確認します。

    MessageDigest md1 = MessageDigest.getInstance("MD5");
    md1.update(new byte[] {1, 2});
    md1.update(new byte[] {3, 4});
    System.out.println(Arrays.toString(md1.digest()));

    MessageDigest md2 = MessageDigest.getInstance("MD5");
    md2.update(new byte[] {1, 2, 3, 4});
    System.out.println(Arrays.toString(md2.digest()));

出力

[8, -42, -64, 90, 33, 81, 42, 121, -95, -33, -21, -99, 42, -113, 38, 47]
[8, -42, -64, 90, 33, 81, 42, 121, -95, -33, -21, -99, 42, -113, 38, 47]
于 2013-07-22T11:50:44.630 に答える