如果我不想在数据库中以纯文本格式存储用户电子邮件,但需要它们进行查找运行,是否有加密的方法(双向,因此可以检索内容)并轻松查找价值?双向加密+查找?
编辑会存储两列,一列用于加密显示,另一列用于查找工作散列?
如果我不想在数据库中以纯文本格式存储用户电子邮件,但需要它们进行查找运行,是否有加密的方法(双向,因此可以检索内容)并轻松查找价值?双向加密+查找?
编辑会存储两列,一列用于加密显示,另一列用于查找工作散列?
对于这类事情,MySQL有aes_encrypt()
和aes_decrypt()
,但是你仍然在传递加密密钥,这意味着你可能只是在明文中传递电子邮件地址。
的基本方法是这样的:
SELECT ...
FROM yourtable
WHERE encrypted_email = AES_ENCRYPT('[email protected]', 'crypt key here');
但同样,你不会获得任何安全性,因为你发送每一次的关键。
如何在不发送加密密钥的情况下执行加密/解密? –
@ cable729你不能。或者您从数据库加载所有地址,然后在应用程序代码中解密它们,然后找出与您正在查找的值相匹配的加密值。 – Romain
@Marc B另外,你如何让你的“aes_encrypt()”以蓝色显示? :) –
这取决于你如何加密你的数据。你在代码中进行加密,然后插入加密值?如果是这样,那么你可以通过查找加密值而不是明文值来查找值。
伪代码:
string encryptedEmail = Encrypt("[email protected]", myEncryptionKey);
....
string sInsert = "INSERT INTO table (email) VALUES ('" + encryptedEmail + "')";
...
string sSelect = "SELECT * FROM table WHERE email = '" + encryptedEmail + "'";
在导线现在,你永远只能路过加密信息,关键从来没有在任何地方去。
通过“lookup”你的意思是解密并以纯文本显示密码? – hafichuk
RSA或AES如何? –
“用户电子邮件”是指“用户电子邮件地址”还是“用户电子邮件信息”? – dasblinkenlight