我正在尝试为密码重置进行验证过程,我使用的是两个值:纪元时间,我想使用用户的旧密码(pbkdf2)作为密钥,
因为我不想获取非 ASCII 字符,所以我使用了 SimpleEncode 库,因为它速度很快,因为它只是一个带有密钥的 BASE64,但问题是密码太长(196 个字符)所以我得到一个长密钥!
我所做的是拆分结果code = simpleencode.encode(key,asci)[::30]
,但这不会是唯一的!
为了了解它是如何工作的,我尝试了 Facebook 重置过程,但给出的是一个数字!那么这个过程是如何工作的,他们不是使用密钥来使某人难以伪造链接来重置某人的密码吗?
更新:算法将如何工作:
1- 使用 epoch 获取时间time.time()
2-生成纪元时间的Base64(用于URL)和纪元时间值+一个密钥,这个密钥是PBKDF2(密码)。
3-生成网址 www.example.com/reset/user/Base64(time.time()) 并发送此网址 +simpleencode.encode(key,asci)[::30]
4-当用户点击网址时,他把生成的代码,这个生成的代码,如果与网址匹配,则让他修改密码,否则,这是一个忘记网址!