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

PHP:生成唯一用户密钥的选项,php,hash,key,Php,Hash,Key,在研究了几天散列、生成随机数或唯一键之后,我现在有点困惑 我还有最后一件事要做,那就是用户密钥。我想为在我的网站注册的每个成员/用户存储一个唯一的密钥。因此,此密钥必须是唯一的,不能重复。我正在考虑使用用户电子邮件,并将其与时间日期或其他内容进行散列 那么我想知道哪种方法是创建这样一个密钥的最佳方法- 我可以用它来帮我吗? for ($i=0;$i<10;$i++) { echo md5(uniqid(rand(), TRUE)) . "\n"; } 不过,我有几件事不明白——就

在研究了几天散列、生成随机数或唯一键之后,我现在有点困惑

我还有最后一件事要做,那就是用户密钥。我想为在我的网站注册的每个成员/用户存储一个唯一的密钥。因此,此密钥必须是唯一的,不能重复。我正在考虑使用用户电子邮件,并将其与时间日期或其他内容进行散列

那么我想知道哪种方法是创建这样一个密钥的最佳方法-

我可以用它来帮我吗?

for ($i=0;$i<10;$i++) {
    echo md5(uniqid(rand(), TRUE)) . "\n";
}
不过,我有几件事不明白——就像在php.net
hash_hmac(“ripemd160”,“敏捷的棕色狐狸跳过了懒狗”,“秘密”)中的这个例子一样

那么“秘密”是什么呢?我能不能换个说法,比如时间日期? 我想我可以用电子邮件地址来代替“敏捷的棕色狐狸跳过了懒狗”

或者我可以用来做这个?

for ($i=0;$i<10;$i++) {
    echo md5(uniqid(rand(), TRUE)) . "\n";
}
唯一的问题是它会产生
$
/
,我需要将它们删除,否则当我从URL请求密钥时会出错

所以我可以这样做-

$hash = $phpass -> HashPassword('me@example.com'.$timedate)
$key = preg_replace("/[^a-zA-Z0-9]+/", "", $hash);
如果您有更好的建议,请告诉我。

我建议“窃取”函数。

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

但是,是的,用你想要的任何东西来代替“快速棕色狐狸”,它应该会起作用

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

我还有最后一件事要做 获取正确的用户密钥。我 要为每个存储唯一的密钥吗 在我的网站上注册的成员/用户 网站。所以这个密钥必须是唯一的 而不是重复。我正在考虑 使用用户电子邮件并使用 时间日期之类的

  • 我会让您的数据库使用
  • 您还可以使用:
    md5(uniqid(rand(),TRUE))
index.php:
for ($i=0;$i<10;$i++) {
    echo md5(uniqid(rand(), TRUE)) . "\n";
}

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

简单的md5()函数是否不足以满足您的需要?还是字符串也需要是可解码的?md5(),即当使用用户ID(如果您使用的是DB,它本身应该是唯一的)时,比如说电子邮件地址将提供一个固定长度为32个字符的字符串,您可以使用该字符串,第三方几乎无法解码。您需要此唯一的用户密钥做什么?@Gumbo♦: 当用户验证他们的电子邮件地址时,我会使用它进行身份验证。例如,当一个人注册时,我会发送一封电子邮件,让他/她点击一个验证链接,如-,这有意义吗?@Alfred:谢谢。我可以将电子邮件地址添加到md5中,像-md5(uniqid(rand(),TRUE).$email)一样进行散列吗;?你可以,但你为什么要这么做呢?@Alfred:以防万一md5(uniqid(rand(),TRUE));本身不足以创建唯一的密钥!因此,添加电子邮件将使其100%独特!lol还是没有必要?说真的,自动递增。为什么还要用别的东西?有电子邮件,人们不能更改他们的电子邮件,或者不能共享电子邮件(一些已婚夫妇确实这样做)@Alfred:非常感谢-我会非常喜欢这个openid!谢谢!!:-)