生成注册激活密钥时如何防止冲突?

时间:2011-11-11 22:16:28

标签: php random passwords key activation

我正在研究一个大项目的注册系统。

成功注册后,服务器会生成一些激活密钥,将其添加到用户的行并通过电子邮件发送给用户。为此目的使用一些密码生成器类。

问题是(我知道这听起来很抽象,但我只是想知道),如何避免重复传递生成?我的意思是,在将来的生成器中是否有可能创建db表中已存在的激活密钥?密钥生成后我应该检查重复吗?

5 个答案:

答案 0 :(得分:3)

我建议使用PEAR中的Text_Password package。不要试图重新发明这个轮子。

不要强制密码是严格唯一的。实际上 安全。考虑一下,如果我尝试将密码设置为 xyzzy 并且该网站告诉我我不能,那就意味着现在我知道某个帐户正在使用 xyzzy 作为密码。我只需要在所有帐户上尝试使用该密码,直到找到哪一个。

不要将哈希摘要用作生成的密码。您的用户不希望键入32个字符(或更长)的十六进制字符串。我曾在2001年使用PKI和MD5哈希编写安全软件激活密钥包的经验。但没有人会使用它,因为密钥太长了。

请使用哈希摘要和盐来存储密码。我们无畏的领导者阅读本文:You're Probably Storing Passwords Incorrectly

另请参阅我对其他一些与密码相关的问题的答案:

答案 1 :(得分:2)

试用uniqid()

答案 2 :(得分:1)

使用具有唯一输入的SHA或Whirlpool等哈希算法(如用户的唯一用户名)将导致预期冲突率为0的哈希值。

我不会为此推出自己的算法。如上所述,uniqid()md5()是有保障的解决方案。

答案 3 :(得分:0)

你可以使用时间,但它不会“随机”,你必须添加一些随机性......

$key = md5(time());

答案 4 :(得分:0)

使用GUID作为注册码,因为它始终是唯一的并由系统

生成
相关问题