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