2012-01-05 15 views
0

私は、検索値をdbテーブルの2つの列と比較する必要がある検索機能を作成しています。 1つの列は単なる名前で、もう1つの列は "xxxxxx-xxxx"形式(数字のみ)の暗号化された値です。ユーザーは、テーブル内の合計文字列の一部を検索するだけで済みます。PHP検索機能、暗号化された値の比較

私は「名前LIKE%search_value%」を使用して名前を比較しますが、暗号化された値についてはその方法を使用できません。

どのように比較を行う良い方法はどのようなアイデアですか?

+0

「暗号化された値」とは何ですか? – KingCrunch

+0

いくつかの例を挙げてください。つまり、ユーザーは何を検索し、いつ返されるべき行ですか? –

答えて

1

'a'の暗号化が 'bac'の暗号化とは完全に異なっているため、暗号化された値にワイルドカード検索を使用できませんでした。暗号化されたフィールド内で部分文字列マッチングを行う方法はありません。しかし、簡単な直接均等テストが可能です。あなたがMySQLのAES_ENCRYPT()のようなDB側の機能をしている場合は、あなたがサブストリングマッチングについて

... WHERE 
     (name LIKE '%search%') OR 
     (cryptedfield = AES_ENCRYPT('search', 'key')) 

を行うことができ、あなたは最初のフィールドを復号化する必要があると思います:

... WHERE 
    (name LIKE '%search%') OR 
    (AES_DECRYPT(cryptedfield, 'key') LIKE '%search%') 
0

を基本的に、場合暗号化する必要があるため、システムのどの部分もそれを検索できません。検索可能にする必要がある場合は、おそらく暗号化する必要はありません。

これ以外の場合は、暗号化の目的を破るようなものです。

関連する問題