URLチェックを重複するためのハッシュアルゴリズムはどれですか?
-
29-10-2019 - |
質問
データベースにURLを保存しています。新しいものを挿入すると、そのURLがすでにデータベースに存在するかどうかを確認したいと思います。
一般的な慣行(私が間違っていない場合)は、MD5またはSHA-1などを使用してURLをハッシュすることです...そして、データベースでそのフィールドをチェックして、新しいものを挿入する前に複製することです。
MD5が衝突を生み出すことができることを知っています。
私に何を提案しますか?私のニーズは次のとおりです。
DBサイズ: 最終的には、データベースに関する1億から2億人の記録になります
パフォーマンス/スピード: ハッシュサイズが小さいため、データベースには重複の重い負荷チェックがありません(もちろん、そのフィールドにはコースのインデックスがあります)
許容範囲: 100,000のレコードごとに1つの衝突が発生しても気にしません。私のニーズは、0%の衝突(大きなハッシュ)ではなく、パフォーマンス(小さなハッシュ)に向けています。
意図的に衝突を生成するための奇形のURLによる攻撃の可能性: 非常に低い
このような攻撃が成功した場合に可能な最大ダメージ: 非常に低い
質問:
MD5で十分だと思いますか(提案するより良いもの)?
たぶんMD5は偶数です 過剰になります 私にとっては、より簡単なものを使用することで、パフォーマンスのメリットを真剣に得ることができますか?
よろしくお願いします!
解決
MD5または同様の比較的安価なハッシュを使用するのはどうですか(多分 クォーク?)、そして一致するエントリの完全なURLをチェックする衝突のまれなケースでは?このようにして、ほとんどの場合、安価なハッシュチェックがありますが、実際に重複したURLを挿入することもありません。