0

我刚刚使用盐渍 sha1 完成了对数据库中的密码的加密。当然,我需要实现一个忘记密码的链接(电子邮件也是如此)。我现在制作了那些不好的转变版本。

我假设由于加密方式,我需要提示用户重置密码。

我只是在寻找最安全的方法来做到这一点。任何建议,或资源和教程的链接,以及我应该使用什么样的方法将不胜感激。

谢谢,美好的一天。

4

1 回答 1

2

需要明确的是sha1,咸味或奶酪洋葱味不是加密,而是称为散列。这是一种单向功能,具有独特的独特输出。在数据库中对密码使用加盐哈希的想法是双重的:

  1. 哈希是一种单向函数,因此没有人可以访问数据库实际上可以确定这些密码是什么。非常好的练习。
  2. 加盐的部分,假设您正在对用户名+密码+一些垃圾进行哈希处理,这意味着每个用户名+密码组合应该是一个唯一的哈希。它使通过预先计算的散列进行字典攻击/快捷方式变得困难,因为大多数人没有一本字典ninefingers:stackoverflow!!:{insertcommonwordhere}。它不会阻止他们生成它,只会让它更不方便。

现在我们已经解决了这个问题,是的,如果用户忘记了他们的密码,您就无法通过电子邮件将其发送给他们,因为您无法反转哈希值。按设计。

相反,您要做的是允许用户安全地重置他们的密码。最简单的形式是,如果用户输入他们的电子邮件地址,您通过电子邮件向他们发送指向您网站的链接,在其参数中包括一个唯一的、一次性使用的令牌,该令牌在短时间内有效。

其他选择?为他们生成一个密码并通过电子邮件发送给他们。英国的英国政府网关做了一件很有趣的事情:网页包含一半的密码,另一半是电子邮件。您需要同时再次登录。

现在,百万美元的问题:它安全吗?不,没有什么是安全的。没有 100% 的安全性。曾经。这种存储密码的特殊方法增加了安全性,因为:

  • DBA 不能轻易滥用他们对用户表的访问权限;
  • 以某种方式select * from table users;也无法轻松读取这些密码的恶意请求。

但是,一旦您依赖能够向用户发送电子邮件作为一种安全通信方法,您就依赖于:

  • 他们的电子邮件帐户是安全的;
  • 他们的电子邮件没有受到监控。

那么问题就变成了——你真的需要有多安全?实施 email-out-a-reset-link 解决方案将适用于大多数情况,因为它们不是足够高价值的目标,真的。

于 2011-01-20T02:36:05.503 回答