random_bytes
funkcja
Generuje kryptograficznie bezpieczne losowe bajty z CSPRNG systemu operacyjnego. Używaj do tokenów CSRF, kluczy sesji i innych sekretów.
random_bytes(int $length): string
random_bytes zwraca ciąg losowych bajtów z kryptograficznie bezpiecznego generatora (CSPRNG — ang. Cryptographically Secure Pseudo-Random Number Generator) systemu operacyjnego. Wynik jest nieprzewidywalny i nadaje się do generowania tokenów CSRF, soli, kluczy jednorazowych i innych sekretów kryptograficznych.
Nie używaj rand(), mt_rand() ani uniqid() do sekretów — te generatory są przewidywalne i nie nadają się do zastosowań kryptograficznych.
Ponieważ wynik to surowe bajty (mogą zawierać dowolne znaki), zazwyczaj konwertujesz je do czytelnego formatu przez bin2hex() (hex) lub base64_encode() (base64).
<?php
declare(strict_types=1);
// Generowanie tokenu CSRF — 32 bajty = 256 bitów losowości:
$bajty = random_bytes(32);
$token = bin2hex($bajty); // 64-znakowy ciąg hex
echo strlen($token); // wynik: 64
echo $token; // wynik: np. a3f8c2... (za każdym razem inny)
// Zapis do sesji:
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
// Alternatywnie base64:
$tokenBase64 = base64_encode(random_bytes(32)); // 44 znaki
// ❌ Nie używaj tych generatorów do sekretów:
// rand() — przewidywalny, nie kryptograficzny
// mt_rand() — przewidywalny, nie kryptograficzny
// uniqid() — oparty na czasie, przewidywalny