我正在尝试为密码重置制定一个验证流程,使用了两个值:Unix时间戳和用户旧密码(pbkdf2)作为密钥。
由于我不想得到非ASCII字符,所以我使用了SimpleEncode库,因为它只是使用密钥的BASE64编码,速度很快,但问题是密码太长了(196个字符),所以密钥也很长!
我所做的是分割结果code = simpleencode.encode(key,asci)[::30]
,但这将不是唯一的!
想了解Facebook重置过程的工作原理,但给出的是一个数字!那么这个过程是如何工作的?他们不使用密钥使重置链接难以被篡改吗?
更新:算法的工作原理:
1- 使用Unix时间戳获取时间 time.time()
2- 生成Unix时间戳的Base64编码(用于URL)和Unix时间戳值+一个密钥的Base64编码,此密钥为PBKDF2(password)。
3- 生成URL www.example.com/reset/user/Base64(time.time()) 并发送此URL + simpleencode.encode(key,asci)[::30]
4- 当用户单击URL时,将输入生成的代码,如果此生成的代码与URL匹配,则允许他修改密码,否则,它是一个无效URL!