2011-10-23 24 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