1

GSMモデムまたはイーサネット接続のいずれかを使用してネットワークに接続するデバイスに統一された一意のIDを与えるために使用できるハッシュ関数を探しています。

したがって、特定のデバイスについて、ハッシュの生成に使用できるIMEI番号またはMACアドレスがハードコーディングされています。

私はここ数時間ハッシュ関数を研究していて、使用したいと思うかもしれないさまざまな非暗号化および暗号化ハッシュを読んでいます。ハッシュはあまり頻繁に計算されないため、私の焦点はパフォーマンスよりも衝突が少ないことです。

私のフロントランナーは、MD5、FNV-1a、MurmurHash2、Hsieh、およびDJBです。

私が使用するハッシュはすべてCで実装する必要があり、小さなプロセッサを搭載したマイクロコントローラで使用されます。

ニーズに合った適切なハッシュ関数を選択する秘訣は、どのような種類の入力をフィードするかを知ることです。

私がこの質問をしている理由は、IMEIとMACの両方が有限の長さと範囲を持っているという考えが頭に浮かんだので、おそらく両方の完全なセットをカバーでき、衝突がない非常に単純なハッシュ関数が存在するからです。(したがって、完全なハッシュ関数)

IMEI番号は10進数の15桁(16進数で12〜13バイト?)で、MACアドレスは6バイトです。よく考えてみると、2つの入力番号のセットが衝突することはないと思いますが、それが間違っている場合は、遠慮なく訂正してください。もしそうしたら、それを防ぐために何かできるでしょうか?セットの1つにシードを追加しますか?

私は正しい方向に進んでいますか?これらの組み合わせたセットに最適なハッシュ関数を見つけることは可能ですか?

ありがとう!

アップデート

回答とコメントをありがとう。ハッシュ関数として恒等関数;)を使用し、数値のセット間で重複する可能性があるため、マスクも使用することになりました。

IMEI、IMEISV、およびMACはすべて6.5バイト以下に収まるので、値を7バイトに格納してから、最初のバイトで、数値の取得元のセットに基づいたマスクを使用してビット単位のORを実行します。すべてのセットで一意です。

4

1 に答える 1

3

未知の成長する入力セットに対して完全なハッシュを作成する方法はありません。フィールドをIMEIまたはMACのいずれか大きい方よりも1ビット大きくし、そのビットを使用して、IMEI/MAC全体とともにどのタイプの識別子であるかを示すことができます。小さいもの衝突しますが、おそらく非常にまれです。

于 2011-08-16T15:35:52.940 に答える