2012-02-25 80 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