(PHP 5 >= 5.3.0, PHP 7)
openssl_random_pseudo_bytes — Genera una cadena de bytes pseudo-aleatoria
$length
   [, bool &$crypto_strong
  ] ) : string
   Genera una cadena de bytes pseudo-aleatoria, con el número de bytes
   determinado por el parámetro length.
  
   También indica si se usó un algoritmo criptográficamente fuerte para producir los
   bytes pseudo-aleatorios, y hace esto mediante el parámetro opcional crypto_strong.
   Es raro que este parámetro sea FALSE, pero algunos sistemas pueden ser antiguos rotos.
  
lengthLa longitud de la cadena de bytes deseada. Debe ser un entero positivo. PHP intentará asignar este parámetro a un entero no nulo para usarlo.
crypto_strong
       Si se pasó en la función, mantendrá un valor booleano value que determina
       si el algoritmo usado fue "criptográficamente fuerte", p.ej., seguro para el uso con GPG,
       contraseñas, etc. TRUE si lo hizo, de otro modo FALSE
      
   Devuelve el string de bytes generado si se tuvo éxito,  o FALSE en caso de error.
  
Ejemplo #1 Ejemplo de openssl_random_pseudo_bytes()
<?php
for ($i = -1; $i <= 4; $i++) {
    $bytes = openssl_random_pseudo_bytes($i, $cstrong);
    $hex   = bin2hex($bytes);
    echo "Longitudes: Bytes: $i y Hex: " . strlen($hex) . PHP_EOL;
    var_dump($hex);
    var_dump($cstrong);
    echo PHP_EOL;
}
?>
El resultado del ejemplo sería algo similar a:
Longitudes: Bytes: -1 y Hex: 0 string(0) "" NULL Longitudes: Bytes: 0 y Hex: 0 string(0) "" NULL Longitudes: Bytes: 1 y Hex: 2 string(2) "42" bool(true) Longitudes: Bytes: 2 y Hex: 4 string(4) "dc6e" bool(true) Longitudes: Bytes: 3 y Hex: 6 string(6) "288591" bool(true) Longitudes: Bytes: 4 y Hex: 8 string(8) "ab86d144" bool(true)