如何实现临时密码逻辑?

时间:2010-10-24 04:54:37

标签: passwords

我想实现一个类似于某些网站所做的逻辑,他们会询问您的电子邮件地址,并在您点击该链接时向您发送该链接,并将其重定向到家中并提供临时密码在时间限制内到期并要求您设置新密码。

我很想知道生成临时密码的逻辑,如何存储它们以保证它们的安全并在一段时间后使它们过期。我没有任何语言偏好。但我可以很好地理解java和php的例子。请建议。

2 个答案:

答案 0 :(得分:3)

一种方法是生成提供用作密码的用户信息的MD5哈希值。

$name = "sushil bharwani";
$email = "sushil@example.com";
$pass = md5($name . $email);

哪个会为您提供1f3870be274f6c49b3e31a0c6728957f之类的字符串。因为MD5函数总是会从给定的输入创建相同的输出,理论上可能是认识你的人正在注册,需要哪些字段以及你最有可能放入哪些字段,他们可以猜测MD5哈希是什么寄给你。这可以通过在md5的输入中添加一个随机数来缓解,但除非你为一个隐蔽的政府机构工作,否则任何人都不太会关心这一点。

如果您想要更安全,可以生成公钥/私钥对,将公共密钥对存储在数据库中,并在电子邮件中发送私有密钥对。除了蛮力之外,私钥不能被猜测,所以在这方面它会更安全。但是因为你通过电子邮件发送它,这是完全不安全的,它不太可能是一个非常大的安全收益。

另外请记住,任何一种生成密码的方法都会产生更难以猜测用户自己选择密码的东西,所以过于担心这可能是浪费精力。

对于临时部分,只需使用时间戳记录密码的创建时间,并使用cronjob删除任何未更改的x天以内的日期。< / p>

答案 1 :(得分:1)

好吧,如果你有一些存储密码的东西,我想你正在使用数据库存储密码。

所以你可以做的是创建一个只包含临时密码的新表。然后,当用户单击链接以获取临时密码时,创建一个随机字符串,然后从现在开始大约一个小时的到期时间。要做到这一点,只需花时间并在上面加一小时。然后将新的临时密码,它到期的时间以及用户的密码保存到表中的一行中以获取临时密码。

然后,当用户使用临时密码时,请检查当前时间是否大于到期时间。如果是,则密码已过期,但不起作用。如果没有,那就行了。

如果你想要,你可以定期运行一个通过你的数据库的脚本并删除过期的密码,但只要有一个过去的时间,那么它将无法工作,所以它并不重要。 / p>

这就是如何存储和过期它们。希望它有所帮助!