繁体   English   中英

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

[英]PHP: Options to generate an unique user key

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

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

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

我可以使用hash_hmac()为我做这个吗?

我有几件事情不了解hash_hmac() - 就像在这个例子中来自php.net hash_hmac('ripemd160', 'The quick brown fox jumped over the lazy dog.', 'secret');

那么什么是“秘密” - 我可以把任何不同的东西改成,比如时间吗? 我认为我可以取代'快速的棕色狐狸跳过懒狗。' 用电子邮件地址?

或者我可以使用Portable PHP密码哈希框架来做到这一点?

唯一的事就是它产生了. $/我需要删除它们,否则当我从URL请求密钥时我会收到错误。

所以我可能会这样做 -

$hash = $phpass -> HashPassword('me@example.com'.$timedate)
$key = preg_replace("/[^a-zA-Z0-9]+/", "", $hash);

如果您有任何更好的建议,请告诉我。

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

  • 我会让你的数据库使用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

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

我建议“窃取” drupal_random_bytes函数。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM