random_bytes în PHP

Generează octeți aleatorii siguri, pentru token-uri, chei și coduri secrete.

Sintaxă
random_bytes(int $length): string

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()) sau uniqid() pentru token-uri. Sunt previzibile; random_bytes nu 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.