PHP:生成唯一用户密钥的选项

时间:2011-01-26 19:03:34

标签: php hash key

经过几天研究哈希,生成随机数或唯一密钥后,我现在有点困惑。

我还有一件事我想要正确使用哪个是用户密钥。我想为在我的网站上注册的每个会员/用户存储一个唯一的密钥。所以这个密钥必须是唯一的,不能重复。我正在考虑使用用户电子邮件并将其与时间或其他内容一起散列...

然后我想知道创建这样一个密钥的最佳方法是什么 -

我可以使用hash_hmac()为我执行此操作吗?

我有几件事情不明白hash_hmac() - 就像在这个例子中来自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);

如果您有任何更好的建议,请与我们联系。

3 个答案:

答案 0 :(得分:14)

  

我最后一件事我想要   把它弄好,这是用户密钥。一世   想要为每个人存储一个唯一的密钥   注册我的会员/用户   网站。所以这个密钥必须是唯一的   而不是重复。我在想   使用用户电子邮件并将其哈希   时间或其他什么

  • 我会让您的数据库使用autoincrement
  • 为您处理此问题
  • 您也可以使用uniqidmd5(uniqid(rand(), TRUE));

<强>的index.php:     

for ($i=0;$i<10;$i++) {
    echo md5(uniqid(rand(), TRUE)) . "\n";
}

<强>输出:

php index.php 
ba0d9aad1ff0ceadf4b25f101099b91e
b5a6db5e174b426061d3d3835a6fcaea
54be6d3a03e0590917ed20b097442e3a
6e208a61eae8cfd102d4a41decf0f64e
2cafac5402815af87e8299e5e67016bd
95e839097a566471c70fe357e5a101d2
c6908532bda6f926debdda754b02f931
aac7adf999dd4dd009f208b176ea90d0
1ed7779229e57b05adc088b375582cfb
e016a684564d5cdb89201ebab1038609

它们都是独一无二的,你可以使用它们。你不应该做任何其他的事情吗?

答案 1 :(得分:2)

我建议“窃取”drupal_random_bytes功能。

答案 2 :(得分:0)

关于hash_hmac(): 我相信“秘密”只是一些只有你和代码知道的字符串。它用于帮助随机化算法,并根据您使用的“秘密”密钥使其唯一。只需选择您知道的任何短语,并将其放在那里。 注意:如果您希望返回相同的值,则每次散列时必须具有相同的值。因此,使其成为常量,而不是变量,以免哈希在每次时使用它返回不同的值。

但是,是的,用你想要哈希的东西取代“快速棕色狐狸”,它应该有效。

另外一个选项:使用数据库中用户的主键[通常是一个简单的整数]来引用它们。