security - 存储并用于恢复的 mysql 电子邮件

标签 security email mysql

我想做一张 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/

相关文章:

c# - 奇尔卡特 : How to decrypt an encrypted email?

mysql - 如何修改 MySQL 列以允许 NULL?

security - Jester 中的 CSRF 防伪 token

python - 如何在 Django 中保护 URL

java - 基于注释的安全限制不适用于 Web 套接字触发的方法调用

PHP - 将特殊字符转换为 HTML 实体

java - 在 Linux 机器上配置 Java 7 中的站点异常(exception)列表

email - 不使用 SSL 将电子邮件从通用 IMAP 服务器迁移到 Google Apps

mysql - 如何授予用户远程访问mysql服务器的权限?

python - 使用Python更新mysql错误