【问题标题】:Php mysql LOWER function with AES_DECRYPT带有 AES_DECRYPT 的 PHP mysql LOWER 函数
【发布时间】:2011-10-23 10:01:05
【问题描述】:

我使用 php mysql 将 AES 加密数据存储在数据库中。我使用 AES_ENCRYPT 输入的。问题是数据来自 iphone 并且成员的“名字”以大写字母形式出现并存储为大写字母。例如'Pooja'

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

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

当我不使用 LOWER 时,它会给我“Pooja”。

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

【问题讨论】:

  • 你试过输出LOWER(AES...))的结果吗?
  • 是的,它不会将我输出到小写。
  • 你能举一个不能降低的示例字符串吗?
  • 默认情况下 MySQL 有一个不区分大小写的字符串比较,所以你可能不需要 LOWER 并且问题可能与解密有关。你使用什么排序规则?我认为区分大小写的有_cs 后缀。
  • 请注意,二进制排序规则与区分大小写的排序规则不同,尽管在这种情况下,两者都可能为您提供所需的结果。有一个粗略的解释in the manual

标签: php mysql database


【解决方案1】:

我遇到了同样的问题。我试图在我的数据库中搜索电子邮件地址。我的 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)

【讨论】:

    【解决方案2】:

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

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

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

    pooja
    poojaaaa
    pooja foo pooja bar
    

    但不是

    pooj
    pooj a
    apooja
     pooja
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-15
        • 2018-09-26
        • 2013-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多