加密的电子邮件id不区分大小写的mysql

cbeh67ev  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(342)

我需要使用不区分大小写的电子邮件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;

我用的是二进制,但没有用

vmdwslir

vmdwslir1#

aes加密是一种双向算法,这意味着您可以恢复原始值,因此您还可以更新不符合要测试的格式的现有记录。
在数据库中运行更新之后,只需应用timbiegeleisen提出的建议,就可以开始了。
更新现有记录的演示

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)

注意:不要忘记更改update语句,使其与列名和用作salt的值相匹配。

cl25kdpy

cl25kdpy2#

它有简单的逻辑,当你注册存储哈希值的电子邮件id转换成小写。并且在登录时也将其转换为小写。所以,如果用户在任何情况下输入电子邮件id,则加密字符串匹配。

相关问题