MYSQL SELECT与AES_ENCRYPT类似

时间:2011-09-30 16:23:37

标签: mysql select encryption sql-like

如果字段为AES_ENCYPTED,如何使用WHERE和LIKE serach执行Mysql SELECT?

示例:

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

基本上,使用$searchStr

两端的LIKE通配符对加密列执行搜索

2 个答案:

答案 0 :(得分:8)

如果没有先解密,就无法搜索加密列。

你需要做WHERE AES_DECRYPT(like, salt) LIKE '%something%',但这会很慢。

答案 1 :(得分:4)

我一直在寻找一种简单的方法来将SELECT LIKE用于带有MySQL的AES_ENCRYPTED字段。效果最好的是:

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)."%'";