MYSQL SELECT与AES_ENCRYPT类似

use*_*206 5 mysql encryption select 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+"'))',%')
Run Code Online (Sandbox Code Playgroud)

基本上,在加密列上执行搜索,并在两端使用LIKE通配符 $searchStr

cee*_*yoz 9

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

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


小智 6

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

SELECT * FROM table 
WHERE CONVERT(AES_DECRYPT(`haystack`,'key') USING utf8) LIKE '%needle%'
Run Code Online (Sandbox Code Playgroud)

我已经使用 PHP 5 在 MySQL 5 上对此进行了测试。

这在处理数千行时运行良好,但由于解密和转换,对于非常大的表可能不理想。

这是基本的 PHP 代码:

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