2011-10-23 11 views
1

php mysqlを使用してデータベースにAES暗号化データを格納しました。私はAES_ENCRYPTを使用して入力しました。問題は、データがiPhoneから送信され、メンバーの「ファーストネーム」が大文字で最初の文字で来て、Upperとして保存されていることです。 「プーハー」についてはphp mysql LOWER関数(AES_DECRYPT付き)

私は次の検索のために行くとき、それは私に結果を与えていないのだろうかと思っています。

SELECT * 
FROM member 
WHERE LOWER(AES_DECRYPT(fname,'xxxxxxxxxxxxxxxxx')) LIKE'%$pooja%' 

LOWERを使用しないと、「Pooja」が表示されます。

誰でも私をここで修正していただけますか?

+0

あなたはトライですか? dを押して 'LOWER(AES ...)'の結果を出力しますか? – zerkms

+0

はいLOWERの場合は出力しません。 – vikas

+0

あなたは下げることができない文字列の例を挙げられますか? – zerkms

答えて

0

最初に%$を使用してもよろしいですか?他の人が言ったように は、LOWERはケースを無視するので、この試してみてください:

SELECT * FROM member WHERE AES_DECRYPT(fname,'xxxxxxxxxxxxxxxxx') LIKE 'pooja%'; 

%がゼロ以上の任意の文字に一致するので、このクエリは、次の

pooja 
poojaaaa 
pooja foo pooja bar 

の全てではなく

と一致する必要があります
pooj 
pooj a 
apooja 
pooja 
+0

@SharmaJこの助けをしましたか? – middus

5

私は同じ問題を抱えていました。自分のDBでメールアドレスを検索しようとしていました。私はユーザーを持っていた[email protected]私のmember_table

SELECT LOWER(AES_DECRYPT(email_address, 'my_key') USING 'utf8') 
FROM `member_table` 
WHERE LOWER(AES_DECRYPT(email_address, 'my_key') USING 'utf8') LIKE '[email protected]' 

しかし、それは常に下の機能にもかかわらず、私に大文字にメールアドレス[email protected]を返したため、これは働いていなかったとメンバーがいることemail_address.comとしての電子メールアドレスを挿入した場合クエリはそれを見つけることができませんでした。

解決策は、CONVERT(AES_DECRYPT(email_address、 'my_key' USING 'utf8')を使用することでした)これにより、メンバーを鈍感な方法(上、下、または混合)で見つけることができ、 。LOWER関数は、比較以下の例を参照する:問題がに関する

SELECT LOWER(CONVERT(AES_DECRYPT(email_address, 'my_key') USING 'utf8')) 
FROM `member_table` 
WHERE CONVERT(AES_DECRYPT(email_address, 'my_key') USING 'utf8') LIKE '[email protected]' 

:AES_ENCRYPT()はキーkey_strを用いSTR文字列を暗号化しを用いて動作しない暗号化された出力を含むバイナリ文字列を返しますLOWER関数(mysqlドキュメントに記載されている通り:https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_aes-decrypt