【问题标题】:Two-way encryption + look-up?双向加密+查找?
【发布时间】:2012-01-16 01:47:05
【问题描述】:

如果我不想将用户电子邮件以纯文本形式存储在数据库中,但需要它们用于运行查找,有没有办法既加密(双向,以便可以检索内容)又轻松查找升值?

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

【问题讨论】:

  • “查找”是指解密并以纯文本形式显示密码吗?
  • “用户邮箱”是指“用户邮箱地址”还是“用户邮箱信息”?
  • 我想增加一定程度的安全性,如果数据库遭到破坏,它仍然会被加密并要求他们也访问密钥。
  • 为什么要对用户的电子邮件地址如此谨慎?他们可能已经把它给了 facebook,谁在无耻地与任何想要它的人分享它;)
  • @Romain 我知道你只是在开玩笑,但我认为拿安全开玩笑是个坏主意。我希望更多人认真对待我的个人信息——甚至是我的电子邮件。

标签: mysql sql encryption hash


【解决方案1】:

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

基本方法是这样的:

SELECT ...
FROM yourtable
WHERE encrypted_email = AES_ENCRYPT('someone@example.com', 'crypt key here');

但同样,您不会获得任何安全性,因为您每次都在发送密钥。

【讨论】:

  • 如果不发送明文加密密钥,您将如何执行加密/解密?
  • @cable729 你不能。或者您从数据库中加载所有地址,在应用程序代码中对其进行解密,然后找出与您要查找的地址匹配的加密值。
  • @Marc B 另外,如何让“aes_encrypt()”显示为蓝色? :)
  • @cable729 他插入了文档的链接,链接显示为蓝色。
【解决方案2】:

这取决于您加密数据的方式。您是否在代码中进行加密,然后插入加密值?如果是这样,那么您只需查找加密值而不是明文值即可查找值。

伪代码:

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

现在您只是通过网络传递加密信息,密钥永远不会去任何地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-15
    • 2011-04-23
    • 2010-09-07
    • 1970-01-01
    • 2011-04-15
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多