经过几天研究哈希,生成随机数或唯一密钥后,我现在有点困惑。
我还有一件事我想要正确使用哪个是用户密钥。我想为在我的网站上注册的每个会员/用户存储一个唯一的密钥。所以这个密钥必须是唯一的,不能重复。我正在考虑使用用户电子邮件并将其与时间或其他内容一起散列...
然后我想知道创建这样一个密钥的最佳方法是什么 -
我可以使用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);
如果您有任何更好的建议,请与我们联系。
答案 0 :(得分:14)
我最后一件事我想要 把它弄好,这是用户密钥。一世 想要为每个人存储一个唯一的密钥 注册我的会员/用户 网站。所以这个密钥必须是唯一的 而不是重复。我在想 使用用户电子邮件并将其哈希 时间或其他什么
md5(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(): 我相信“秘密”只是一些只有你和代码知道的字符串。它用于帮助随机化算法,并根据您使用的“秘密”密钥使其唯一。只需选择您知道的任何短语,并将其放在那里。 注意:如果您希望返回相同的值,则每次散列时必须具有相同的值。因此,使其成为常量,而不是变量,以免哈希在每次时使用它返回不同的值。
但是,是的,用你想要哈希的东西取代“快速棕色狐狸”,它应该有效。
另外一个选项:使用数据库中用户的主键[通常是一个简单的整数]来引用它们。