Токен – уникальная последовательность символов, используется для обеспечения информационной безопасности, используется в авторизации и защите от несанкционированного доступа. Рассмотрим возможности 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
Функция генерирует строку псевдослучайных байт с определенной длиной.
В составе класса OAuth (PECL, не входит в сборки PHP) есть дополнительный класс OAuthProvider с методом generateToken()
, который генерирует случайный токен в виде строки байт.
В PHP 7 появилась функия random_bytes()
, которая генерирует криптографически безопасные псевдослучайные байты.
Токен можно сгенерировать на основе функций md5()
, sha1()
, crypt()
и hash()
. Использование только хеширования не безопасно, поэтому добавляют «соль».