2016-05-27 6 views
0

hash()を使用して、2つの文字列の類似度を計算/検索します。PHP - 2つの文字列間の類似度を計算するのに最適なハッシュアルゴリズムは何ですか?

PHPでは、多くのサポートされているハッシングアルゴリズムがあります。リストはhash_algos(で入手できます)。

どのアルゴリズムを使用するのが最適ですか?

+0

どのように「最も推奨されるアルゴリズム」を定義していますか、最も高速または最も安全です...または最も正確? – RomanPerekhrest

+2

これらの文字列が単なる文字列の場合は、確かに使用します: http://php.net/manual/en/function.levenshtein.php 2つの文字列がまったく同じであることを知りたい場合は、 http:// php.net/manual/en/function.strcmp.php –

+0

@RomanPerekhrest最も高速です。 – LeMoussel

答えて

4

あなたの質問はあまりにもあいまいです。

まず、2つの文字列の類似度を計算したいとします。これは、ハッシングをまったく必要としません。そのためには、compareequalitylevenshtein distanceedit distanceなどを使用できます。我々は、任意の処理中のデータを使用する必要がある計算やデータを変更しない平文に格納することはできませんいくつかの機密データがある場合、我々は

をハッシュ使用しないのはなぜ

とそれを正確に比較すると、とハッシュが使用されます。 eg. storing user passwords, which would need only comparison with the password string once he tries logging in

パラメータ

スピード、セキュリティ(そしておそらく、人気)

最も人気のハッシュのいくつかはmd5, SHA-1, SHA-256 and SHA-512が含まれます。これは、彼らが安全で比較的遅いという順序です。

fast, less secure | md5 < SHA-1 < SHA-256 < SHA-512 | relatively slow, more secure 

私はSHA-1またはSHA-256を使用することをお勧めします。これは十分に速く、十分に安全です。

また、秘密の塩を使用すると、安全性を増強できます(明らかな理由により、ハッシュによるセキュリティの向上が指数関数的に増加します)。

+0

これはどのように質問に答えますか? –

+0

彼はハッシュのために推薦されたalgoに頼んだ...私は彼に名前を与えた。これはどのように質問に答えないのですか?いくつかの詳細を追加したい場合、私は追加して喜んでします。 – vish4071

2

ハッシュは類似性とは関係ありません。さらに、大部分のハッシングアルゴリズムは、非常に似た文字列の場合、ほとんど完全に異なる結果を生成します。たとえばのSHA1:

The quick brown fox jumps over the lazy dog = 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

と一つのシンボルとの違いは全く別の文字列です:

The quick brown fox jumps over the lazy cog = de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3


があり単純で、うまく見つけるためのアルゴリズムを知っています文字列の類似性。同じ長さの文字列の場合はHamming distance、異なる長さの文字の場合はLevenshtein distanceのほんの少しの例に過ぎません。string metrics

P.S.本当に本当にハッシュを使用したい場合、このタイプのハッシュの正しい用語はlocality preserving hashです。あなたはそれについてhereを読むことができます。

関連する問題