我正在做一个大项目的注册系统。
成功注册后,服务器生成一些激活密钥,将其添加到用户的行中,并通过电子邮件发送给用户。使用一些密码生成器类来实现此目的。
问题是(我知道这听起来很抽象,但我只是想知道),如何避免重复生成pass?我的意思是,将来生成器有没有可能创建已经存在于数据库表中的激活密钥?密钥生成后需要检查重复吗?
发布于 2011-11-12 06:18:22
试试uniqid()吧。
发布于 2011-11-12 06:21:14
我推荐使用PEAR的Text_Password package。不要试图重新发明这个轮子。
不要强制密码必须是唯一的。强制密码实际上是不太安全的。考虑一下,如果我尝试将密码设置为xyzzy,但站点告诉我不能,这意味着现在我知道一些帐户正在使用xyzzy作为密码。我只需要在所有账户上尝试这个密码,直到我找到哪一个。
不要使用哈希摘要作为生成的密码。您的用户不想键入32个字符(或更长)的十六进制字符串。我有过在2001年使用PKI和MD5散列编写安全软件激活密钥包的经验。但是没有人会用它,因为钥匙太长了。
确实使用散列摘要和盐来存储密码。阅读了这篇由我们无畏的领导者:You're Probably Storing Passwords Incorrectly撰写的文章。
另请参阅我对其他几个与密码相关的问题的回答:
发布于 2011-11-12 06:21:43
使用具有唯一输入(例如用户的唯一用户名)的散列算法将导致预期冲突率为0的散列。
我不会使用我自己的算法来解决这个问题。如前所述,uniqid()或md5()是有保证的解决方案。
https://stackoverflow.com/questions/8100636
复制相似问题