3

私のコード内で、URL のハッシュを生成しています (実質的に無制限の長さです)。私は現在sha1()を使用していますが、衝突の可能性がわずかであることはわかっていますが、ハッシュを保存するのに最大255バイトあるので、その利用可能なスペースを使用して衝突の可能性を下げることもできます.さらに遠く。

次のいずれかがありますか?

  1. より長い、またはカスタマイズ可能なハッシュ長を持つ別の PHP ハッシュ関数はありますか?
  2. sha1 のような固定長のハッシュ関数を可変長の入力で使用して、より長いハッシュを生成する方法はありますか?

それとも、sha1 の 20 バイトのハッシュは何に対しても十分であり、私はそれについて心配するのをやめるべきですか?

4

7 に答える 7

5

それとも、sha1 の 20 バイトで十分なので、心配する必要はありませんか?

丁度。

ハッシュテーブル、ピジョンホール、誕生日
http://www.codinghorror.com/blog/archives/001014.html

于 2008-11-17T12:58:21.920 に答える
3

見てみましょう... http://www.cryptography.com/cnews/hash.html

Q:SHA-1で衝突を見つけるのはどれくらい難しいですか?
A:報告された攻撃には、2 ^ 69(約5900億)のハッシュ計算の推定作業係数が必要です。

リスクはかなり低いようです...^_ ^

于 2008-11-17T13:39:09.950 に答える
1

本当に心配なら、256 ビットまたは 512 ビットのハッシュ (32 文字または 64 文字) を選択してください。

あなたが本当に、本当に偏執的であるなら、塩を加えてください.

それよりも偏執的である場合は、md5 や sha-256 など、2 つのハッシュを連結して長いハッシュを作成します。

于 2008-11-17T13:05:20.907 に答える
0

まあ、それはあなたが短いハッシュキーを持っている場合にのみ意味があります。そうしないと、テーブルでデータがオーバーフローするリスクがあります。

于 2009-07-24T23:01:09.307 に答える
0

あなたが何をしようとしているのか正確にはわからないので、データを 2 回入力したくなく、衝突をすばやく検出する機能が必要であると仮定します。その場合、擬似コードで次のアルゴリズムを提案します。

found = false
hv = hash(urlValue)
if table[hash,url] contains pair (hv,urlValue)
   found = true
endif

if (not found)
   insert table (hv,urlValue)
endif

データベースで、ハッシュ列に一意でないインデックスを作成して、検索を高速化します。これにより、(hash,url) に対するクエリを迅速に処理できます。通常、ハッシュは一意である可能性が高いため、1 行のみを確認しますが、実際の URL に基づいて受け入れるか拒否するかを実際に決定します。これにより、より短いハッシュ関数を使用できます。おそらく、後で使用するために既に URL を保存しているため、追加のストレージは必要ありません。

于 2008-11-17T14:22:59.160 に答える
0

シーケンシャル ID (10 進数または 16 進数) を既存のハッシュにいつでも先頭/末尾に追加できますか?

確かに固定長のハッシュはありませんが、コードが a) 一意であり、b) 推測不可能であることはわかります (誰かがシーケンシャル部分に気付いたとしても、残りの部分をソルト/ハッシュする方法を知りません)。コード)。

もちろん、これらのハッシュを誰からも隠そうとしないのであれば、そもそも単純にシーケンシャル ID を使用してみませんか?

于 2008-11-17T13:34:03.110 に答える
0

本当に夢中になりたい場合は、URL のさまざまな部分のハッシュを組み合わせることができます。

URL の長さが 40 文字であるとします。これを 5 つの部分に分割します。文字 1 ~ 8 の SHA1 を取得し、文字 9 ~ 16 の SHA1 に連結し、17 ~ 24 の SHA1 に連結します... など。理論的には、 2 800 の可能性があり、2 (69*5) = 2 345 = 7.2 * 10 103行の後に衝突について心配する必要があるだけです。

でも言ったように、私たちはこのような方法で狂気の町に直行しています。

于 2008-11-17T14:37:51.173 に答える