2011-09-30 12 views
5

フィールドがAES_ENCYPTEDの場合、WHEREとLIKE serachを使用してMysql SELECTを実行するにはどうすればよいですか?MYSQL SELECT WHERE LIKE AES_ENCRYPT

例:基本的に

SELECT AES_DECRYPT(place,'"+salt+"'),AES_DECRYPT(web_address,'"+salt+"') 
FROM access 
WHERE place= LIKE '%(AES_ENCRYPT('"+searchStr+"','"+salt+"'))',%') 

、あなたが最初にそれを復号化せずに暗号化された列を検索することはできません$searchStr

+0

のですか? – genesis

+0

(PHP変数)$ query =(MYSQL文の文字列) – user963206

答えて

8

の両端のLIKEワイルドカードで暗号化された列で検索を実行。

WHERE AES_DECRYPT(like, salt) LIKE '%something%'を実行する必要がありますが、それはかなり遅くなるでしょう。

+0

試してみましたが、うまくいきませんでしたが、正しい軌道に乗っていると思っています...(遅いのは小さなWebアプリケーションの問題ではありません) – user963206

+0

I'll 're・phrase'上記のコメント - あなたは伝説です。私は途中でマイナー '='を持っていた、ありがとう。 – user963206

+0

これは動作しません、誰も値を解読するために他の方法を示唆することができます。 – Vicky

3

私は、MySQLでAES_ENCRYPTEDフィールドにSELECT LIKEを使用する簡単な方法を探していました。最適なものは次のとおりです。

SELECT * FROM table 
WHERE CONVERT(AES_DECRYPT(`haystack`,'key') USING utf8) LIKE '%needle%' 

は、私はPHP 5千複数の行を処理するときにこれは非常によく動作します

を使用してMySQL 5でこれをテストしているが、原因は非常に大きなテーブルのための理想的ではないかもしれません解読と変換まで。

これは、基本的なPHPコードです:それはどのような言語

$key = md5("yourchosenkey".$salt);  
$query = "SELECT * FROM ".$tableName." ". 
     "WHERE CONVERT(AES_DECRYPT(`haystack`,'".$key."') USING utf8) ". 
     "LIKE '%".addslashes($needle)."%'"; 
関連する問題