使用AES_DECRYPT的Php mysql LOWER函数

时间:2011-10-23 10:01:06

标签: php mysql database

我使用php mysql将AES加密数据存储在数据库中。我使用AES_ENCRYPT输入的。问题是数据来自iphone,成员的“名字”在UPPER CASE中以第一个字母出现并存储为Upper。对于考试'Pooja'

我想知道当我去搜索以下内容时,它并没有给我任何结果。

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

当我不使用LOWER时,它给了我'Pooja'。

有人可以在这里纠正我吗?

3 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。我试图在我的数据库中搜索电子邮件地址。我的 member_table 中有用户 EMAIL_ADDRESS@GMAIL.COM

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_ADDRESS@GMAIL.COM'

然而,这不起作用,因为它总是以大写 EMAIL_ADDRESS@GMAIL.COM 返回电子邮件地址,尽管功能较低且成员将其电子邮件地址插入 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_AddreESS@Gmail.CoM'

问题涉及:AES_ENCRYPT()使用密钥key_str加密字符串str,返回包含加密输出的二进制字符串,这不适用于LOWER函数(如此处的mysql文档中所述) :https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_aes-decrypt

答案 1 :(得分:0)

您确定要在开头使用%$吗? 正如其他人所说,LOWER应该忽略大小写,所以试试这个:

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

%匹配零个或多个任意字符,因此此查询应匹配以下所有

pooja
poojaaaa
pooja foo pooja bar

但不是

pooj
pooj a
apooja
 pooja

答案 2 :(得分:0)

几分钟前也有这个问题。您是否尝试使用CONVERT(my_decrypted_string USING 'latin1')转换解密后的字符串?

AES_DECRYPT似乎返回二进制字符串或类似的东西。使用此类型LOWER()不起作用:

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_lower