Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何生成用于在线票务服务的安全且唯一的令牌?_Php_Laravel_Cryptography - Fatal编程技术网

Php 如何生成用于在线票务服务的安全且唯一的令牌?

Php 如何生成用于在线票务服务的安全且唯一的令牌?,php,laravel,cryptography,Php,Laravel,Cryptography,我需要一种方法来生成加密安全和唯一的令牌,以便在在线售票服务中使用。在PHP(Laravel)中,我应该考虑哪些问题和最好的实践? < P>试试这个: bin2hex(random_bytes(64)); PHPbin2hex函数: PHPrandom bytes函数:如果您使用的是Laravel,则内置了一个随机字符串生成器 use Illuminate\Support\Str; $random = Str::random(40); 更多信息 我以前也用过类似的东西,这是一个额外的检查,

我需要一种方法来生成加密安全和唯一的令牌,以便在在线售票服务中使用。在PHP(Laravel)中,我应该考虑哪些问题和最好的实践?

< P>试试这个:

bin2hex(random_bytes(64));
PHP
bin2hex函数:


PHP
random bytes函数:

如果您使用的是Laravel,则内置了一个随机字符串生成器

use Illuminate\Support\Str;

$random = Str::random(40);
更多信息

我以前也用过类似的东西,这是一个额外的检查,以确保令牌以前没有被使用过。可能性很低,几乎没有必要这样做

$findKey = function() {
    $proposed = Str::random(40);
    if (Thing::where('token', $proposed)->count() === 0) {
        return $proposed;
    }
    $findKey();
 };
 $this->token = $findKey();
 $this->save();
独一无二的代币?安装


  • 在MySQL中,一个整数(11)无符号主键可以容纳大约40亿行。这等于32位
  • 如果从加密安全的伪随机数生成器生成9个原始字节(可能值的72位),然后将结果base64,最终将得到一个12个字符的标识符
  • 根据生日问题,72位可能值意味着在2**36条记录上发生碰撞的可能性为50%
这意味着,在大约690亿条记录之后,只有50%的机会出现两个重复的随机值(远远超过40亿的存储容量)。这意味着您几乎永远不会发生碰撞。当然,在插入新的选择器之前,您仍然应该确保生成的每个选择器都是唯一的


注意:这只是为了回答问题,向下滚动查看更多方法


Laravel内置提供函数,为我们提供
uuid
,因此您可以使用该函数。 这里有一个例子

use Illuminate\Support\Str;

return (string) Str::uuid();
这里是JWT Auth令牌的参考

我认为这是我拥有的最安全、最独特的令牌生成器。每次登录系统时,它都会为一个人生成不同的令牌


JWT Auth token from

您可以使用unix时间戳。您可以从@zahidhasanemon获得帮助您指的是每次迭代递增一次的unix时间戳。这是你能选择的最少的加密系统你说的“加密安全”是什么意思?您试图阻止攻击者做什么?
use Illuminate\Support\Str;

return (string) Str::uuid();