【发布时间】:2011-01-26 19:03:34
【问题描述】:
经过几天对散列、生成随机数或唯一键的研究,我现在有点困惑。
我还有最后一件事想要做对,那就是用户密钥。我想为在我的网站上注册的每个成员/用户存储一个唯一的密钥。所以这个键必须是唯一的,不能重复。我正在考虑使用用户电子邮件并将其与时间日期或其他内容进行哈希处理......
那我想知道创建这样一个密钥的最佳方法是什么-
我可以使用hash_hmac() 为我执行此操作吗?
我对@987654322@ 有一些不明白的地方 - 就像来自 php.net hash_hmac('ripemd160', 'The quick brown fox jumped over the lazy dog.', 'secret'); 的这个例子一样
那么什么是“秘密”——我可以用不同的东西代替吗,比如时间日期? 我假设我可以替换“快速棕色狐狸跳过懒狗”。电子邮件地址?
或者我可以使用Portable PHP password hashing framework 来执行此操作?
唯一的问题是它会生成.、$ 和/,我需要将它们删除,否则当我从 URL 请求密钥时会出错。
所以我可以这样做 -
$hash = $phpass -> HashPassword('me@example.com'.$timedate)
$key = preg_replace("/[^a-zA-Z0-9]+/", "", $hash);
如果您有更好的建议,请告诉我。
【问题讨论】:
-
一个简单的 md5() 函数是否不足以满足您的目的?还是字符串也需要可解码? md5(),当使用一个用户 ID(它本身应该是唯一的,因为你使用的是数据库),假设电子邮件地址将提供一个固定长度为 32 个字符的字符串,你可以使用并且几乎第三方无法解码
-
你需要这个唯一的用户密钥做什么?
-
@Gumbo♦:当用户验证他们的电子邮件地址等时,我使用它来进行身份验证。例如,当有人注册时我会发送一封电子邮件并要求他/她点击一个验证链接,例如 - xx.com/verify/(key) - 有意义吗?