3

n 個のオブジェクト (x1、x2、...、xn) の順序付きリストがあるとします (可変長バイナリ データ ファイルなど)。

これらの各オブジェクトは安全にハッシュ化され (SHA1 など)、m ビットのハッシュ コード (h1、h2、...、hn) を生成します。

ここで、これらのハッシュ コードを組み合わせて、順序付きリストを一意かつ安全に (無視できる衝突確率を無視して) 識別する複合コードを作成したいと考えています。

(オブジェクトが大きく、実際のデータを再度読み取ることができないと仮定します)

これを行う単純で間違った方法の 1 つは、ハッシュ コードを一緒に XOR することです。これには、(x1, x2) が (x2, x1) と同じ複合コードを持つという望ましくない特性があります。

ハッシュコードを組み合わせて目的のプロパティを取得するには、どのアルゴリズムを使用できますか?

4

2 に答える 2

2

一貫性とセキュリティ上の理由から、個々の SHA-1 ハッシュの連結に SHA-1 を適用して、リスト アイテムの個々のハッシュを結合します。

于 2012-05-16T12:46:21.603 に答える
1

リスト ハッシュに Java と同じアルゴリズムを使用できる可能性があります。これは 32 ビット ハッシュ コードの例です。

int hashCode = 0;
for(Element e:list) {
   hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
}

多層の場合、別の素数を使用できます。このアルゴリズムの主なアイデアを理解し、任意の m ビット ハッシュ コードに適用できることを願っています。

于 2012-05-16T12:21:59.473 に答える