2011-12-08 55 views
0

如果我不想在数据库中以纯文本格式存储用户电子邮件,但需要它们进行查找运行,是否有加密的方法(双向,因此可以检索内容)并轻松查找价值?双向加密+查找?

编辑会存储两列,一列用于加密显示,另一列用于查找工作散列?

+0

通过“lookup”你的意思是解密并以纯文本显示密码? – hafichuk

+0

RSA或AES如何? –

+0

“用户电子邮件”是指“用户电子邮件地址”还是“用户电子邮件信息”? – dasblinkenlight

回答

3

对于这类事情,MySQL有aes_encrypt()aes_decrypt(),但是你仍然在传递加密密钥,这意味着你可能只是在明文中传递电子邮件地址。

的基本方法是这样的:

SELECT ... 
FROM yourtable 
WHERE encrypted_email = AES_ENCRYPT('[email protected]', 'crypt key here'); 

但同样,你不会获得任何安全性,因为你发送每一次的关键。

+0

如何在不发送加密密钥的情况下执行加密/解密? –

+0

@ cable729你不能。或者您从数据库加载所有地址,然后在应用程序代码中解密它们,然后找出与您正在查找的值相匹配的加密值。 – Romain

+0

@Marc B另外,你如何让你的“aes_encrypt()”以蓝色显示? :) –

0

这取决于你如何加密你的数据。你在代码中进行加密,然后插入加密值?如果是这样,那么你可以通过查找加密值而不是明文值来查找值。

伪代码:

string encryptedEmail = Encrypt("[email protected]", myEncryptionKey); 
.... 
string sInsert = "INSERT INTO table (email) VALUES ('" + encryptedEmail + "')"; 
... 
string sSelect = "SELECT * FROM table WHERE email = '" + encryptedEmail + "'"; 

在导线现在,你永远只能路过加密信息,关键从来没有在任何地方去。