Генерация токенов в PHP

Токен – уникальная последовательность символов, используется для обеспечения информационной безопасности, используется в авторизации и защите от несанкционированного доступа. Рассмотрим возможности PHP для его генерации.

1

Функция создаёт уникальный глобальный идентификатор (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
PHP

Вариант без 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
PHP
2

Функция генерирует строку псевдослучайных байт с определенной длиной.

function gen_token() {
	$bytes = openssl_random_pseudo_bytes(20, $cstrong);
	return bin2hex($bytes); 
}

echo gen_token(); // a437b15e363ad6cd401a0a87ce0e37171aaeb0c6
PHP
3

В составе класса OAuth (PECL, не входит в сборки PHP) есть дополнительный класс OAuthProvider с методом generateToken(), который генерирует случайный токен в виде строки байт.

$provider = new OAuthProvider();
$token = $provider->generateToken(10);
echo bin2hex($token);
PHP
4

В PHP 7 появилась функия random_bytes(), которая генерирует криптографически безопасные псевдослучайные байты.

$token = random_bytes(15);
echo bin2hex($token); // ffa7a910ca2dfce501b0d548605aaf
PHP
5

Токен можно сгенерировать на основе функций md5(), sha1(), crypt() и hash(). Использование только хеширования не безопасно, поэтому добавляют «соль».

function gen_token() {
	$token = md5(microtime() . 'salt' . time());
	return $token;
}

echo gen_token(); // 15aada70a60bcbb156459c75d9bea50e
PHP
02.12.2019
23583

Комментарии

, чтобы добавить комментарий.

Другие публикации

Использование API Яндекс Диска на PHP
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
56003
+20
Генерация QR-кода в PHP
Вопрос генерации QR-кодов в PHP достаточно освещён, есть много библиотек, одной из них является «PHP QR Code» – быстрый и легкий класс, рассмотрим его применение совместно с графической библиотекой...
66828
+18
Преобразование цветов в PHP
Несколько примеров как перевести цвета из HEX в RGB и обратно с помощью PHP.
15936
-1
Сумма прописью PHP
В PHP 5.3 появился класс NumberFormatter для форматирования чисел и денежных единиц в нужной локали. На его основе была написана функция со склонением слова «рубль».
17086
+5
Работа с директориями в PHP
Набор PHP функций для работы с директориями, получение списка файлов в папке, копирование и удаление содержимого папок.
29367
-2
Поиск похожих текстов в базе данных MySQL + PHP
Один из вариантов поиска похожих статей в базе данных основан на схождении слов в двух текстах.
7273
+6