我想做一张 table 。我的用户给我他们的电子邮件地址,然后将其存储在数据库中。如果他们需要将登录详细信息重新发送给他们,他们可以输入此电子邮件地址,系统将检查该地址是否存在,如果存在,将向他们发送一封包含登录详细信息的电子邮件。
什么数据库结构最适合这个?
存储那些侵入数据库的每个人都看不到的电子邮件的最佳方法是什么?请记住,我只会检查数据库中的另一个值,而不需要将实际电子邮件地址存储为输出?
最佳答案
如果您只需要检查电子邮件是否在系统中,您应该存储某种散列(MD5 或 SHA,MySQL 本身支持)而不是实际的电子邮件地址。哈希是一种单向加密,这意味着您无法从转换后的哈希文本中检索电子邮件地址,但您可以从电子邮件地址重新创建哈希。
这里对如何在 MySQL 中存储 SHA1 字符串进行了很好的讨论: Storing SHA1 hash values in MySQL
如果您的表格看起来像这样:
userid: INT
emailhash: CHAR(40)
您可以使用如下查询检查电子邮件地址是否存在:
SELECT userid FROM tablename WHERE SHA1([e-mail address from user]) = emailhash;
如果它返回一个结果,那么您就知道与电子邮件地址匹配的用户 ID,您可以向您从用户那里收集到的电子邮件地址发送一封电子邮件。 (请记住,您将无法从数据库中检索电子邮件地址。)
关于MySQL的加密算法的更多注释在这里: http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html
关于security - 存储并用于恢复的 mysql 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4549517/