私は、検索値をdbテーブルの2つの列と比較する必要がある検索機能を作成しています。 1つの列は単なる名前で、もう1つの列は "xxxxxx-xxxx"形式(数字のみ)の暗号化された値です。ユーザーは、テーブル内の合計文字列の一部を検索するだけで済みます。PHP検索機能、暗号化された値の比較
私は「名前LIKE%search_value%」を使用して名前を比較しますが、暗号化された値についてはその方法を使用できません。
どのように比較を行う良い方法はどのようなアイデアですか?
私は、検索値をdbテーブルの2つの列と比較する必要がある検索機能を作成しています。 1つの列は単なる名前で、もう1つの列は "xxxxxx-xxxx"形式(数字のみ)の暗号化された値です。ユーザーは、テーブル内の合計文字列の一部を検索するだけで済みます。PHP検索機能、暗号化された値の比較
私は「名前LIKE%search_value%」を使用して名前を比較しますが、暗号化された値についてはその方法を使用できません。
どのように比較を行う良い方法はどのようなアイデアですか?
'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%')
を基本的に、場合暗号化する必要があるため、システムのどの部分もそれを検索できません。検索可能にする必要がある場合は、おそらく暗号化する必要はありません。
これ以外の場合は、暗号化の目的を破るようなものです。
「暗号化された値」とは何ですか? – KingCrunch
いくつかの例を挙げてください。つまり、ユーザーは何を検索し、いつ返されるべき行ですか? –