2

異なるオブジェクトからの2つのハッシュを組み合わせる一般的な方法は、XORを使用することです。これは理にかなっていますが、以下の投稿のThomas Porninによる2番目のコメントで述べられているように、XORは可換です。つまり、セット内の各要素をハッシュしてXORと組み合わせると、どのような順序でも常に結果が得られます。同じハッシュ:

XORがハッシュを組み合わせるデフォルトの方法であるのはなぜですか?

順序に依存したいハッシュを組み合わせる良い方法は何ですか?サイズに固有の場合、32ビットおよび64ビットの既知の手法は何ですか?

4

1 に答える 1

1

結果のハッシュ順序を依存させるには、アルゴリズムにシーケンシャル(つまり非静的)な側面が必要です。最も一般的な手法は、おそらく巡回冗長検査(CRC)の手法です。

CRCは、XORされたフィードバックを備えたシフトレジスタとしてハードウェアに実装できます。このようなシフトレジスタは、決定論的な乱数ジェネレータとして機能します。初期状態が同じであれば、常に同じ状態のシーケンスを通過します。これらの状態は、CRC署名の計算で使用され、繰り返し可能な方法でデータをXORします。

2つのハッシュ値を組み合わせるには、CRCアルゴリズムからの3番目の値とそれらをXORします。これは、ルックアップテーブルから計算または取得される場合があります。-

人気のあるCRCコード:

09 bits (CRC-8)
17 bits (CRC-16)
33 bits (CRC-32)
65 bits (CRC-64)

Classless.Hasherに詳細が記載されています。

C#の実装はHashLibにあります。

于 2013-01-02T09:47:10.077 に答える