2011-10-23 52 views
1

我有使用php mysql存儲在數據庫中的AES加密數據。我使用AES_ENCRYPT輸入的內容。問題是數據來自iPhone,而成員的「名字」以大寫字母的第一個字母出現,並以上限形式存儲。對於考試'Pooja'Php mysql LOWER功能與AES_DECRYPT

我想知道,當我去尋找以下然後它不給我任何結果。

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

當我不使用LOWER時,它給了我'Pooja'。

任何人都可以在這裏糾正我嗎?

+0

你有沒有trie 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

@SharmaJI有幫助嗎? – middus

5

我有同樣的問題。我試圖在我的數據庫中搜索一個電子郵件地址。我有用戶[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()加密字符串str使用密鑰key_str的和返回包含加密輸出,不與工作一個二進制串LOWER函數(如在mysql文檔中記錄:https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_aes-decrypt