我目前正在http://write-math.com上构建一个类似于http://detexify.kirelabs.org/的 Web 服务,它应该可以帮助用户从绘制的公式中获取 LaTeX 代码。这是我的学士论文的一部分,这个项目的主要目标是让在线手写识别领域的研究变得更容易。这意味着我想分享我从用户那里获得的所有数据。
最简单的方法是简单地转储数据库。这样,我可以一步完成备份副本和转储给研究人员。
只要其他用户使用我的系统,我就不愿与公众分享它的两个部分:电子邮件地址和密码。
密码
密码存储哈希和加盐(这意味着我存储md5($userpass.$salt),$salt这是一个 8 个字符的随机字符串,其中的字符来自A-Za-z0-9- 为每个用户生成盐)。这是否足以让公开它是可以的?
问题的主要部分是关于电子邮件地址:目前,我将其存储为纯文本。但我正在考虑仅存储电子邮件地址的哈希值。这个哈希不能加盐,因为我的登录功能如下:
用户输入$email和$password。两者都以纯文本形式发送到服务器。然后服务器执行(作为伪代码):
$pwdb, $salt = query(SELECT password, salt FROM users WHERE email = :email)
if (md5($password.$salt) == $pwdb) {
Logged in
} else {
Wrong password
}
电子邮件地址
:email是$email或md5($email)或无关紧要md5($email.$applicationwide_random_str)。但是我不能在不经过每个用户的情况下为每个用户制作新的盐(当我认为我永远不会拥有超过 10,000 个用户时,这可能还不错)。
问题
- 当您不知道随机字符串时,使用“标准”硬件(< 1000 美元)附加 8 个字符的随机盐(例如) “取消散列”一封电子邮件(例如
info@martin-thoma.de或)需要多长时间?是几秒钟、几分钟、几小时还是几天的问题?mexplex@gmail.comFHCJ81ru - 如果人们能做到这一点,那是不是很糟糕?我的意思是他们也可以简单地发送电子邮件并查看他们返回的内容。在我的服务中,涉及的个人数据不多:
- 手写符号和公式
- 最终偏手
- 最终何时/何地学习写作
- 最终用户的语言
- 为什么没有服务对电子邮件地址进行散列(好吧,我不知道是否没有这样做的服务,但我从未读过 - 散列密码很常见,但散列电子邮件地址?从未听说过。)
- 如果您只想在用户丢失密码并登录时才使用电子邮件,那么散列电子邮件是否是个好主意?(我虽然关于使用 OpenID,但大多数人不知道它是什么)