2

約 20 億の文字列のハッシュを保存したいと考えています。そのためには、できるだけ少ないストレージを使用したいと考えています。

一連の 16 進数としてハッシュを返す理想的なハッシュ アルゴリズムを考えてみましょう (md5 ハッシュなど)。アイデアを理解する限り、これは、ハッシュの長さが8シンボル以下である必要があることを意味します。そのようなハッシュは 40 億以上 (16 * 16 * 16 * 16 * 16 * 16 * 16 * 16) の異なる文字列をハッシュできるためです。

それで、スペースを節約するためにハッシュを特定の長さにカットしても安全かどうか知りたいですか?(もちろん、ハッシュは衝突すべきではありません)

はい/いいえ/おそらく - 説明または関連研究へのリンクを含む回答をいただければ幸いです。

Ps - 8 文字のハッシュで 20 億個の文字列を格納できるかどうかをテストできることはわかっています。しかし、20 億のハッシュと 20 億の切り捨てられたバージョンを比較する必要があります。私には些細なことではないように思えるので、そうする前に聞いた方がいいでしょう。

4

2 に答える 2

0

ハッシュは数値であり、16 進数 (文字) の文字列ではありません。MD5 の場合、128 ビットまたは効率的な形式で保存された 16 バイトです。それでも問題が解決しない場合は、数値を切り捨てることを検討できます (単語に変換するか、最初にビットシフトすることにより)。優れたハッシュ アルゴリズムは、すべてのビットに均等に分散します。

補遺:

通常、ハッシュを扱うときはいつでも、文字列が本当に一致するかどうかを確認したいと思うでしょう。これにより、ハッシュの衝突の可能性が考慮されます。ハッシュをカットすればするほど、より多くの衝突が発生します。しかし、この段階でそれが起こることを計画することは良いことです.

于 2013-04-30T13:56:53.440 に答える