2011-09-30 26 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)."%'";