如何在mysql数据库中加密电子邮件,但仍能查询它们?

时间:2011-01-30 02:14:55

标签: mysql security encryption

我想使用加密将用户的电子邮件地址存储在MySQL数据库中,以确保在数据库受到威胁时不会公开它们。我相信如果我使用mysql的AES_ENCRYPT()函数对它们进行加密,我就无法在INNODB表中创建索引,因为我必须使用BLOB数据类型。如果表格变得非常大,则需要很长时间。

保护电子邮件地址的最佳解决方案是什么,但仍能快速查询并将其保留为列中的唯一值?

3 个答案:

答案 0 :(得分:10)

当用户在您的网站上注册时,请使用AES_ENCRYPT()来加密电子邮件。

INSERT into users (email) VALUES (AES_ENCRYPT('someemail@example.com', 'aeskey'));

查询数据库时,可以像这样调用AES_DECRYPT()函数:

SELECT AES_DECRYPT(email, 'aeskey') from users;

答案 1 :(得分:4)

如果使用SHA-256或类似方法对地址进行哈希处理,您仍然可以索引表,您仍然可以进行快速地址查找(当用户搜索example@example.com时,您只需对输入进行哈希处理,选择表中的匹配哈希值。

ssh使用very similar散列技巧。 (有关详细信息,请在该联机帮助页中查找-H选项。)

答案 2 :(得分:0)

AES_DECRYPT(电子邮件,'secretkey')和AES_ENCRYPT(电子邮件,'secretkey')是最佳解决方案,

我不是百分之百确定加密后的独特之处,但理论上说,如果电子邮件是唯一的标识应该是唯一的