我需要使用不区分大小写的电子邮件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;
我正在使用二进制文件,但没有用
答案 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 不要忘记更改更新语句,使其与您的列名和用作盐的值相匹配。