2011-09-30 50 views
5

如果字段爲AES_ENCYPTED,我將如何執行MySQL的SELECT語句和LIKE serach?與AES_ENCRYPT類似的MYSQL SELECT

實施例:

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

基本上,與上的$searchStr

+0

什麼語言呢? – genesis

+0

(PHP變量)$查詢=(MYSQL語句字符串) – user963206

回答

8

不能對加密列搜索兩端的LIKE通配符執行加密列的搜索而無需首先解密它。你需要做WHERE AES_DECRYPT(like, salt) LIKE '%something%',但它會很慢。

+0

試過但不會工作,但我認爲你在正確的軌道上...(慢,不是一個問題,因爲小的web應用程序) – user963206

+0

我會'短語'上面的評論 - 你是一個傳奇。我還有一個小小的'=',謝謝。 – user963206

+0

這是行不通的,任何人都可以建議任何其他方式來解密值。 – Vicky

3

我一直在尋找一種簡單的方法來爲MySQL中的AES_ENCRYPTED字段使用SELECT LIKE。該工作的最好的一個是:

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

我已經在MySQL 5使用PHP 5

這種處理幾千行的時候運行得很好測試這一點,但可能不是理想的,由於非常大的表到解密和轉換。

這是基本的PHP代碼:

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