【问题标题】:MYSQL SELECT WHERE LIKE WITH AES_ENCRYPTMYSQL 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 语句字符串)

标签: mysql select encryption sql-like


【解决方案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 如果这不起作用,你有一个不同的问题,应该用示例代码和其他细节开始你自己的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2013-05-01
    • 2015-08-01
    相关资源
    最近更新 更多