【问题标题】:Generate a Unique Key生成唯一密钥
【发布时间】:2023-04-04 02:03:01
【问题描述】:

生成唯一密钥的最佳方法是什么,不容易猜到?

我想为帐户激活和推荐创建一个唯一密钥,其中包括一个校验和,以帮助防止用户轻易猜测其他用户的激活或推荐密钥。

另外,在 PHP 中是否可以创建自己的会话密钥? 如果是这样,您将如何使其与众不同?

非常感谢任何帮助。

【问题讨论】:

标签: php


【解决方案1】:

不要过于复杂:

$key = md5(microtime().rand());

【讨论】:

  • 这将使会话/注册同时开始将获得相同的密钥。在难以调试的情况下可能会使事情过于复杂。
  • 欢迎来到多线程网络服务器环境和多核处理器的世界。
  • 那么这种方法是否可以使用,或者两个或多个用户拥有相同密钥的可能性很小?
  • 即使是两个不同的输入值也可能导致哈希冲突。赔率约为 1/750,000 - 不建议这样做。
  • 为什么不添加会话ID,以防止任何可能的冲突?
【解决方案2】:

您可以使用uniqid 生成唯一ID。查看用于 UUID(通用唯一标识符)生成的 PHP 实现的 cmets。

【讨论】:

  • 请注意,cmet 中提供的大多数建议不保证是唯一的,因为伪随机数生成器和散列函数都不会返回唯一值。
【解决方案3】:

这是我在 php 中用于 uniq 键的:

$activation = md5(uniqid(rand(), true));

【讨论】:

    【解决方案4】:

    只需使用 PHP 的内置函数uniqid()。 See PHP manual.

    【讨论】:

      【解决方案5】:

      其他答案已经涵盖了关于创建(伪)唯一ID的主题,所以我只介绍如何设置自己的会话ID:

      PHP 中的会话 ID 会自动生成,但您可以设置自己的。看session_id()怎么做。

      示例如下:

      $mySessionId = generate_my_session_id();
      $oldId = session_id($mySessionId);
      session_start(); // session must start _after_ setting the id.
      

      【讨论】:

        【解决方案6】:

        我使用这个脚本来随机生成密码,你改变一些东西,它会很好地满足你的需求。

        function generatePassword ($length) {
            $possible = "0123456789abcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRESTUVWXYZ_"; // allowed chars in the password
             if ($length == "" OR !is_numeric($lengh)){
              $length = 8; 
             }
        
             srand(make_seed());
        
             $i = 0; 
             $password = "";    
             while ($i < $length) { 
              $char = substr($possible, rand(0, strlen($possible)-1), 1);
              if (!strstr($password, $char)) { 
               $password .= $char;
               $i++;
               }
              }
             return $password;
        }
        

        对于您自己的会话密钥,它非常简单

        start_session();
        $_SESSION['NewSessionVariable']=$VariableToSet;
        

        【讨论】:

        • idk 有很多方法可以做到这一点,人们可以争论什么更好哈哈:D。
        • 我不会在需要安全性的应用程序中使用此算法,因为随机数生成函数通常不能很好地产生良好的随机值。对此类事情使用像 md5 或更好的 sha2 这样的哈希函数。
        【解决方案7】:

        你可以使用我以前写的这个函数..

           function generateToken($type = null) {
          if($type) {
            return '<input type="hidden" name="token_id" value="'.$_SESSION['token_id'].'">';
          } else {
            if(!isset($_SESSION['token_id'])) {
              $token_id = md5(substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 10));
              $_SESSION['token_id'] = $token_id;
              return $_SESSION['token_id'];
            }
            return $_SESSION['token_id'];
          }
        }
        

        【讨论】:

          猜你喜欢
          • 2010-09-08
          • 2013-07-18
          • 2012-04-09
          • 1970-01-01
          • 2015-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-28
          相关资源
          最近更新 更多