MYSQL SELECT WHERE LIKE WITH AES_ENCRYPT

Posted

技术标签:

【中文标题】MYSQL SELECT WHERE LIKE WITH AES_ENCRYPT【英文标题】: 【发布时间】:2011-11-28 14:56:22 【问题描述】:

如果字段为 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通配符的加密列上执行搜索

【问题讨论】:

(php 变量) $query = (MYSQL 语句字符串) 【参考方案1】:

我一直在寻找一种简单的方法来将 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)."%'";

【讨论】:

【参考方案2】:

如果不先解密,您将无法搜索加密列。

您需要执行WHERE AES_DECRYPT(like, salt) LIKE '%something%',但这会很慢。

【讨论】:

试过了,但不起作用,但我认为你在正确的轨道上......(作为小型网络应用程序慢不是问题) 我会'重新措辞'上面的评论 - 你是一个传奇。我有一个未成年人'=',谢谢。 这不起作用,任何人都可以建议任何其他方式来解密这些值。 @Vicky 如果这不起作用,你有一个不同的问题,应该用示例代码和其他细节开始你自己的问题。

以上是关于MYSQL SELECT WHERE LIKE WITH AES_ENCRYPT的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mysql 中通过 LIKE 使用嵌套的 SELECT?

MySQL查询关键字之select/where/group by/having/distinct/order by/limit/regexp/like

mysql 多个 like 查询优化

MySQL基础之 LIKE操作符

MySQL 使用 LIKE 和 WHERE 选择

mysql like查询语句