我想实现一个类似于某些网站所做的逻辑,它们会询问您的电子邮件地址,并在您单击该链接时向您发送该邮件地址的链接,您将重定向到该链接,并提供一个临时密码,该密码在一个时间限制,并要求您设置新密码。
我很想知道生成临时密码的逻辑,如何存储它们以保证它们的安全并在一段时间后使它们过期。我没有任何语言偏好。但我可以很好地理解 java 和 php 示例。请建议。
一种方法是生成所提供的用户信息的 MD5 哈希值以用作密码。
$name = "sushil bharwani";
$email = "sushil@example.com";
$pass = md5($name . $email);
Run Code Online (Sandbox Code Playgroud)
这会给你一个诸如 之类的字符串1f3870be274f6c49b3e31a0c6728957f。因为 MD5 函数总是根据给定的输入创建相同的输出,所以理论上,有人知道您正在注册、需要哪些字段以及您最有可能在其中输入的内容,他们可以猜测 MD5 哈希值寄给你。这可以通过在 的输入中添加一个随机数来缓解md5,但除非您为秘密政府机构工作,否则不太可能有人愿意尝试这样做。
如果您想更安全,可以生成一对公钥/私钥对,将公钥存储在数据库中,并在电子邮件中发送私钥。私钥只能通过暴力破解,因此在这方面它会更安全。但由于您是通过电子邮件发送的,这是完全不安全的,因此不太可能带来很大的安全收益。
另请记住,无论哪种生成密码的方法都会生成更难以猜测用户自己将选择的密码的内容,因此过分担心可能会浪费精力。
至于临时部分,只需使用时间戳来记录创建密码的时间,并使用 cronjob 删除任何早于x未更改日期的内容。