忘记了安全数据库的密码

Forgot my password for secure database

我创建了一个数据库结构,其中用户获得一个 public 和一个私钥来访问信息, public 密钥被上传到数据库,私钥与用户一起加密密码,所以我让他可以访问它。要在此结构中实现 "Forgot my Password",必须向 Unser 发送一封电子邮件,它提供了使用新密码加密私钥的选项。我考虑过将所有私钥存储在其他地方,但这会损害整个安全性,因为我不想将私钥或密码存储在数据库中的任何位置。所以我现在遇到的问题是没有原始密码我无法访问私钥,所以我怎么能让用户用新密码重新加密它。

您不需要原始密码即可为用户添加更改密码的选项。 非常危险 创建一种恢复用户原始密码的方法。如果我是你,我会使用一些散列算法,比如 SHA-256,并将结果存储为用户的密码。

好吧,回到问题,完成此密码用户更改的一种方法是在您的 User table 中创建一个 UUID。当用户尝试更改密码时,您将他重定向到 link 中具有此 UUID 的页面。此 UUID 用作允许用户更改其密码的临时密钥。

举个例子。

Table:用户

id | name | UUID
1  | John | f39a33c3-e7f5-455a-afad-dcf845eb04a1

当用户想修改密码时,你发送一个link给他的邮箱:

http://yoursite.com/recover-password?UUID=f39a33c3-e7f5-455a-afad-dcf845eb04a1

因此,当用户在页面中输入新密码并提交信息时,您将获得此 UUID 并验证它是否真的是为用户生成的 UUID。因此,可以更改密码。

实现这个最简单的方法是用当前密码解密私钥并用新密码重新加密,然后在数据库中更新新密码。