2012-02-25 3 views
2

私はいくつかのENCRYPTED blobフィールドを含むテーブルを持っています。データはAES_ENCRYPTで暗号化されています。私は今、これらのフィールドからajaxの提案を生成しようとしています。AES_DECRYPTが動作していないLIKEクエリ

次のクエリは、私が検索し、最後の3日間しようとしている

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 

動作しません。次のクエリは機能しますが、私のニーズに合っていません

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')'のようなクエリを書く。それがあなたが期待しているものを返すかどうかを確認する。 –

+0

古いデータを削除して新しいデータを挿入したばかりで、正常に動作し始めました。開発段階にあったので、いくつかのレコードしかないので問題ありませんでした。 – user612703

+0

AES_ENCRYPTのバージョンは動作しません。同じデータが暗号化されるたびに、別の結果が得られます。少なくともAES_DECRYPTのバージョンは動作する可能性があります。しかしながら、この処理は非常に高価である。暗号化された列を可能な限り検索する必要はありません。 –

答えて

5

私はいくつかの定数にハードコーディングすることをお勧めしたいのデバッグに

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

これは私を保存しました。解読後にあなたがcharにキャストしなければならないかもしれないことは分かりませんでした。 Phew。 – brechmos

関連する問題