Токен – уникальная последовательность символов, используется для обеспечения информационной безопасности, используется в авторизации и защите от несанкционированного доступа. Рассмотрим возможности PHP для его генерации.
Функция создаёт уникальный глобальный идентификатор (GUID). Может быть не доступна из-за отсутствия библиотеки php_com_dotnet.dll.
function gen_token()
{
if (function_exists('com_create_guid') === true) {
return trim(com_create_guid(), '{}');
}
return sprintf(
'%04X%04X-%04X-%04X-%04X-%04X%04X%04X',
mt_rand(0, 65535),
mt_rand(0, 65535),
mt_rand(0, 65535),
mt_rand(16384, 20479),
mt_rand(32768, 49151),
mt_rand(0, 65535),
mt_rand(0, 65535),
mt_rand(0, 65535)
);
}
echo gen_token(); // 86696D42-B0E9-465E-8374-6475D53FF0DB
Вариант без com_create_guid:
function gen_token() {
$token = sprintf(
'%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0xffff)
);
return $token;
}
echo gen_token(); // a30c8d89-f2aa-4af9-b1df-6b6443349706
Функция генерирует строку псевдослучайных байт с определенной длиной.
function gen_token() {
$bytes = openssl_random_pseudo_bytes(20, $cstrong);
return bin2hex($bytes);
}
echo gen_token(); // a437b15e363ad6cd401a0a87ce0e37171aaeb0c6
В составе класса OAuth (PECL, не входит в сборки PHP) есть дополнительный класс OAuthProvider с методом generateToken(), который генерирует случайный токен в виде строки байт.
$provider = new OAuthProvider();
$token = $provider->generateToken(10);
echo bin2hex($token);
В PHP 7 появилась функия random_bytes(), которая генерирует криптографически безопасные псевдослучайные байты.
$token = random_bytes(15);
echo bin2hex($token); // ffa7a910ca2dfce501b0d548605aaf
Токен можно сгенерировать на основе функций md5(), sha1(), crypt() и hash(). Использование только хеширования не безопасно, поэтому добавляют «соль».
function gen_token() {
$token = md5(microtime() . 'salt' . time());
return $token;
}
echo gen_token(); // 15aada70a60bcbb156459c75d9bea50e





