生成保存激活密钥作为产品密钥

时间:2018-04-25 10:25:12

标签: php security random

我正在尝试创建一个创建随机String的函数。此字符串应包含字母(仅限大写)和数字。它将用于激活产品。因此用户必须将其键入文本字段。 到目前为止,我发现了以下功能:

function random_str($length, $keyspace =  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'){

  $pieces = [];
  $max = mb_strlen($keyspace, '8bit') - 1;
  for ($i = 0; $i < $length; ++$i) {
      $pieces []= $keyspace[random_int(0, $max)];
  }
  return implode('', $pieces);
}

我对随机函数没有太多经验。那么有什么可以改进的吗?或者你会建议一个不同的功能?

2 个答案:

答案 0 :(得分:1)

要生成加密安全的随机字符串(我建议使用激活密钥),我宁愿使用 openssl_random_pseudo_bytes

您可以在here中找到文档that thread和一些有用的信息(例如,如何获取0-9A-Z字符的随机字符串,而不仅仅是0-9A-F)。

从PHP7.0起,您还可以使用random_bytes,这也是加密安全的。

答案 1 :(得分:-1)

使用 rand 功能代替'random_int'

function random_str($length, $keyspace =  
 '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'){

 $pieces = [];
 $max = mb_strlen($keyspace, '8bit') - 1;
for ($i = 0; $i < $length; ++$i) {
  $pieces []= $keyspace[rand(0, $max)];
 }
 return implode('', $pieces);
}

 echo random_str('50');

// Output //

P7V55MYPQJGRNQ8W0VW7TRKBDK2B7NXWUT20F0P6J5Y7W63X20