如果我不想在数据库中以纯文本形式存储用户电子邮件,但需要它们来运行查找,是否有办法加密(双向以便可以检索内容)并轻松查看价值上涨?
编辑是否会存储两列,一列是加密显示的,一列是为查找工作而进行的?
答案 0 :(得分:4)
对于这类事情,MySQL有aes_encrypt()
和aes_decrypt()
,但是你仍然在明确地传递加密密钥,这意味着你可能只是传递电子邮件地址明确。
基本方法如下:
SELECT ...
FROM yourtable
WHERE encrypted_email = AES_ENCRYPT('someone@example.com', 'crypt key here');
但同样,由于您每次都发送密钥,因此您无法获得任何安全保障。
答案 1 :(得分:0)
这取决于您如何加密数据。您是在代码中进行加密然后插入加密值吗?如果是这样,那么您只需查找加密值而不是明文值即可查找值。
伪代码:
string encryptedEmail = Encrypt("test@test.com", myEncryptionKey);
....
string sInsert = "INSERT INTO table (email) VALUES ('" + encryptedEmail + "')";
...
string sSelect = "SELECT * FROM table WHERE email = '" + encryptedEmail + "'";
现在你只是通过网络传递加密信息,密钥永远不会出现在任何地方。