2012-02-25 110 views
2

我有一个包含几个ENCRYPTED blob字段的表。数据用AES_ENCRYPT加密。我现在试图从这些字段中生成Ajax建议。与AES_DECRYPT不起作用的LIKE查询

下面的查询不起作用

SELECT id 
      , AES_DECRYPT(first_field,'secret_salt') 
      , AES_DECRYPT(second_field,'secret_salt') 
    FROM table 
    WHERE (AES_DECRYPT(first_field,'secret_salt') "%user search value%" 
     OR AES_DECRYPT(second_field,'secret_salt') LIKE "%user search value%" 
      ) 
     AND status = 1 

我一直在寻找,并试图在过去的3天。以下查询不起作用,但不是根据我的需要

SELECT id 
      , AES_DECRYPT(first_field,'secret_salt') 
      , AES_DECRYPT(second_field,'secret_salt') 
    FROM table 
    WHERE status = 1 

我发现此查询,但它也不起作用。

SELECT id, AES_DECRYPT(first_field,'secret_salt'), AES_DECRYPT(second_field,'secret_salt') 
    FROM table 
    WHERE first_field LIKE "%AES_ENCRYPT('user search value','secret_salt')%" 
+0

要调试我建议在一些常数硬编码。拉出一个加密的字段并写入一个查询,比如'SELECT AES_DECRYPT('kjhsjdkha','secret')';检查它是否会返回您所期望的。 – 2012-02-25 15:36:35

+0

我刚刚删除旧数据并插入了新数据,并且我开始工作正常,它处于开发阶段,所以我只有几条记录,所以没有问题 – user612703 2012-02-25 17:52:19

+0

AES_ENCRYPT版本不起作用;每次加密相同的数据时,都会得到不同的结果。 AES_DECRYPT版本至少有一定的工作机会。但是,处理过程非常昂贵。您应该避免必须尽可能在加密列中进行搜索。 – 2012-02-25 21:59:24

回答

5

尝试使用

WHERE CAST(AES_DECRYPT(first_field, 'secret_salt') AS CHAR) LIKE '%foo%' 
+0

这只是救了我。我没有意识到你可能不得不解密后解释为char。唷。 – brechmos 2015-02-26 14:16:38