Ce face random_bytes
random_bytes folosește sursa de numere aleatorii sigură a sistemului de operare. Rezultatul este un text binar, care nu se poate afișa direct.
De obicei rezultatul este transformat cu bin2hex (fiecare octet devine 2 caractere hexazecimale) sau cu base64_encode. 16 octeți dau un token de 32 de caractere.
Parametri
| Parametru | Descriere |
|---|---|
$length |
Numărul de octeți generați. Cel puțin 1. |
Ce returnează
Un text binar cu $length octeți.
Exemple
Exemplul 1: Token pentru resetarea parolei
Rezultatul diferă la fiecare rulare.
<?php
$token = bin2hex(random_bytes(16));
echo $token . "\n";
echo strlen($token) . " caractere";
Rezultat posibil (diferă la fiecare rulare)
9f3c27e1b04ad6585c1e2f7a90b3d48e
32 caractere
Exemplul 2: Lungimea rezultatului
<?php
$octeti = random_bytes(8);
echo strlen($octeti) . " octeți\n";
echo strlen(bin2hex($octeti)) . " caractere hex\n";
echo strlen(base64_encode($octeti)) . " caractere base64";
Rezultat
8 octeți
16 caractere hex
12 caractere base64
Greșeli frecvente
- Afișezi sau salvezi direct rezultatul. Este text binar, cu caractere invizibile care strică HTML-ul sau baza de date. Transformă-l cu
bin2hex. - Folosești
md5(rand())sauuniqid()pentru token-uri. Sunt previzibile;random_bytesnu este.
Comenzi înrudite
random_int: Generează un număr întreg aleatoriu, sigur, între două valori.rand / mt_rand: Generează un număr întreg aleatoriu. Rapid, dar nesigur pentru parole sau token-uri.bin2hex / hex2bin: bin2hex transformă un text (sau date binare) în cifre hexazecimale, iar hex2bin face inversul.