如果字段为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
答案 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)."%'";