2021-04-27 10:30:45 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Traits;
|
|
|
|
|
|
|
|
trait RandomTrait {
|
2021-04-27 10:41:21 +02:00
|
|
|
public function generateRandomKey() {
|
|
|
|
$rand = random_int( PHP_INT_MIN, PHP_INT_MAX );
|
|
|
|
|
|
|
|
return str_shuffle( md5( $rand ) . $rand . $this->random_str() );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generate a random string, using a cryptographically secure
|
|
|
|
* pseudorandom number generator (random_int)
|
|
|
|
*
|
|
|
|
* This function uses type hints now (PHP 7+ only), but it was originally
|
|
|
|
* written for PHP 5 as well.
|
|
|
|
*
|
|
|
|
* For PHP 7, random_int is a PHP core function
|
|
|
|
* For PHP 5.x, depends on https://github.com/paragonie/random_compat
|
|
|
|
*
|
|
|
|
* @param int $length How many characters do we want?
|
|
|
|
* @param string $keyspace A string of all possible characters
|
|
|
|
* to select from
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function random_str(
|
|
|
|
int $length = 64,
|
|
|
|
string $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
|
|
|
): string {
|
|
|
|
if ( $length < 1 ) {
|
|
|
|
throw new RangeException( "Length must be a positive integer" );
|
|
|
|
}
|
|
|
|
$pieces = [];
|
|
|
|
$max = mb_strlen( $keyspace, '8bit' ) - 1;
|
|
|
|
for ( $i = 0 ; $i < $length ; ++ $i ) {
|
|
|
|
$pieces [] = $keyspace[ random_int( 0, $max ) ];
|
|
|
|
}
|
|
|
|
|
|
|
|
return implode( '', $pieces );
|
|
|
|
}
|
2021-04-27 10:30:45 +02:00
|
|
|
|
|
|
|
|
|
|
|
}
|