我想知道如何进行用户密码恢复,但不使用数据库来存储为密码恢复链接生成的哈希值。也不可能以其他方式存储散列。
从基本条件:
该链接仅对当前电子邮件和用户密码有效(更准确地说,对于密码哈希,因为只有它存储在数据库中)
链接仅在创建后 24 小时内有效
如果没有第二点,那么可以简单地以某种方式从当前邮件和用户密码生成一个散列 + 从服务器端添加一些秘密字符,然后检查用户提供的散列。
但是第二点呢?如果我们在哈希中替换另一个时间戳,它将不起作用。
我想知道如何进行用户密码恢复,但不使用数据库来存储为密码恢复链接生成的哈希值。也不可能以其他方式存储散列。
从基本条件:
该链接仅对当前电子邮件和用户密码有效(更准确地说,对于密码哈希,因为只有它存储在数据库中)
链接仅在创建后 24 小时内有效
如果没有第二点,那么可以简单地以某种方式从当前邮件和用户密码生成一个散列 + 从服务器端添加一些秘密字符,然后检查用户提供的散列。
但是第二点呢?如果我们在哈希中替换另一个时间戳,它将不起作用。
我不这么认为。我会解释为什么:1)所有静态数据存储源,例如将哈希写入文件,都可以被认为是一种基础,这是浪费时间。2)也许写入会话的选项适合您,首先不安全,其次也不实用。因为用户可以从一台计算机发出请求,然后从另一台计算机访问链接。但是如果是大学的一类问题,那么你可以这样实现,只需要保持session 24小时就可以解决没有时间的问题
如果这对您来说并不困难,请解释您为什么需要这辆自行车?
补充(作者评论后)
想到一个无神的拐杖,只要用户恢复密码并且不登录系统,它就会起作用(因为你可以知道当前密码,只需点击恢复)
哈希数据库中的整个字符串 + 密码恢复过程开始的字段(我们不存储哈希)
之后,当点击链接时,我们将数据库中的所有行一一散列,并将每一行与到达 url 的散列进行比较(如果用户尚未登录,则数据库中的行没有更改,即,散列将是相同的),我们找到一个匹配项,我们在数据库中查找恢复开始标记,将其与当前日期(链接的 24 小时)进行比较,如果还不到 24 小时就做一些事情。 ..
这是逻辑
我们采用包含以下内容的数据结构:
我们加密所有这些——我们得到一个散列,我们将散列提供给用户
收到哈希后,我们对其进行解密,检查 TTL 和电子邮件是否存在,更改密码
我自己找到了出路。
解决方案#1。如果链接有效期超过一天,则不是最好的。
解决方案 #2。使用对称加密。
当然,它可以更容易或有所改变,没有必要在第二个选项中散列或以明文形式发送电子邮件作为第二个参数。
决定 #3。
这项任务的本质是理论上的,而不是实际的部分。 这会起作用。这就是我想要实现的目标。