Использует ли функция str_random () какую-либо метку времени, например, функцию uniqid ()? - PullRequest
0 голосов
/ 28 октября 2019

Я работаю над API для мобильного приложения и хочу создать уникальный токен для пользовательских проверок. В настоящее время я использую функцию str_random (30) для этого.

По сути, я хочу знать, как работает функция str_random (). Использует ли он какую-либо метку времени?

public function generateToken($user_id)
    {
        $randToken = str_random(30);
        if (Token::updateOrCreate([
            'user_id' => $user_id,
        ], [
            'user_id' => $user_id,
            "token"   => $randToken
        ])
        ) {
            return $randToken;
        }

        return "";
    }

Ответы [ 2 ]

1 голос
/ 28 октября 2019

Я искал Str::random() метод в API Laravel: https://laravel.com/api/5.8/Illuminate/Support/Str.html#method_random

Это точный код на github для генерации случайных строк: https://github.com/laravel/framework/blob/5.8/src/Illuminate/Support/Str.php#L323

    /**
     * Generate a more truly "random" alpha-numeric string.
     *
     * @param  int  $length
     * @return string
     */
    public static function random($length = 16)
    {
        $string = '';
        while (($len = strlen($string)) < $length) {
            $size = $length - $len;
            $bytes = random_bytes($size);
            $string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $size);
        }
        return $string;
    }

Как я вижуне использует временную метку для генерации случайной строки

0 голосов
/ 28 октября 2019

str_random() или \Str::random() использует random_byte() для генерации криптографически безопасных псевдослучайных байтов с помощью специального генератора случайных чисел ОС.

Так что это даже лучше, чем использовать временные метки для случайности, но не гарантирует уникальность uniqid.

Что вы можете сделать для своего уникального токена, это использовать JWT ( J son W eb T oken) формат. Каждый токен будет уникальным, поскольку в какой-то момент он использует идентификатор объекта, у него есть время истечения, что делает его более безопасным в случае утечки, среди других преимуществ ....

...