加密的电子邮件ID不区分大小写的MySQL

时间:2018-07-26 06:05:35

标签: mysql codeigniter

我需要使用不区分大小写的电子邮件ID登录。我的电子邮件ID以加密格式存储,我正在使用类似以下查询的内容从数据库中获取该信息:

    $this->db->select('Name');
    $this->db->from('users');
    $this->db->where('emailId',"AES_ENCRYPT('{$emailId}','/*awshp$*/') ", FALSE);
    $query = $this->db->get();
    $result = $query->row();
    return $result;

我正在使用二进制文件,但没有用

2 个答案:

答案 0 :(得分:0)

它具有简单的逻辑,当您在将电子邮件ID转换为小写形式后注册商店哈希值时。并在登录时也将其转换为小写。因此,如果用户在任何情况下都输入电子邮件ID,则加密字符串匹配。

答案 1 :(得分:0)

AES加密是一种双向算法,这意味着您可以恢复原始值,因此还可以更新不符合要测试格式的现有记录。

在数据库中运行更新后,只需应用Tim Biegeleisen提出的建议,您应该会很好。

用于更新现有记录的演示

mysql> CREATE TABLE t1 (
    ->   email VARBINARY(256)
    ->   );
Query OK, 0 rows affected (0.31 sec)

mysql> INSERT INTO t1 (email) VALUES 
    -> (AES_ENCRYPT('MiXeDcAsEdEmAiL@gmail.com','salt')),
    -> (AES_ENCRYPT('UPPERCASEDEMAIL@gmail.com','salt')),
    -> (AES_ENCRYPT('lowercasedemail@gmail.com','salt'));
Query OK, 3 rows affected (0.09 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> UPDATE t1 SET email = AES_ENCRYPT(LOWER(CAST(AES_DECRYPT(email,'salt') AS CHARACTER)),'salt');
Query OK, 2 rows affected (0.11 sec)
Rows matched: 3  Changed: 2  Warnings: 0

mysql> SELECT CAST(aes_decrypt(email,'salt') AS CHARACTER) lower_cased from t1;
+---------------------------+
| lower_cased               |
+---------------------------+
| mixedcasedemail@gmail.com |
| uppercasedemail@gmail.com |
| lowercasedemail@gmail.com |
+---------------------------+
3 rows in set (0.00 sec)

NB 不要忘记更改更新语句,使其与您的列名和用作盐的值相匹配。