PHP 7 - CSPRNG

No PHP 7, a seguir, duas novas funções são introduzidas para gerar inteiros e strings criptograficamente seguros em uma plataforma cruzada.

  • random_bytes() - Gera bytes pseudo-aleatórios criptograficamente seguros.

  • random_int() - Gera inteiros pseudo-aleatórios criptograficamente seguros.

random_bytes ()

random_bytes () gera uma string de comprimento arbitrário de bytes criptográficos aleatórios que são adequados para uso criptográfico, como ao gerar sais, chaves ou vetores de inicialização.

Sintaxe

string random_bytes ( int $length )

Parâmetros

  • length - O comprimento da string aleatória que deve ser retornada em bytes.

Valores Retornados

  • Retorna uma string contendo o número solicitado de bytes aleatórios criptograficamente seguros.

Erros / exceções

  • Se uma fonte apropriada de aleatoriedade não puder ser encontrada, uma exceção será lançada.

  • Se parâmetros inválidos forem fornecidos, um TypeError será lançado.

  • Se um comprimento inválido de bytes for fornecido, um erro será lançado.

Exemplo

<?php
   $bytes = random_bytes(5);
   print(bin2hex($bytes));
?>

Ele produz a seguinte saída do navegador -

54cc305593

random_int ()

random_int() gera inteiros criptográficos aleatórios que são adequados para uso onde os resultados imparciais são críticos.

Sintaxe

int random_int ( int $min , int $max )

Parâmetros

  • min - O menor valor a ser retornado, que deve ser PHP_INT_MIN ou mais alto.

  • max - O maior valor a ser retornado, que deve ser menor ou igual a PHP_INT_MAX.

Valores Retornados

  • Retorna um inteiro aleatório criptograficamente seguro no intervalo mínimo a máximo, inclusive.

Erros / exceções

  • Se uma fonte apropriada de aleatoriedade não puder ser encontrada, um Exception será lançado.

  • Se parâmetros inválidos forem fornecidos, um TypeError será lançado.

  • Se max for menor que min, um Error será lançado.

Exemplo

<?php
   print(random_int(100, 999));
   print("");
   print(random_int(-1000, 0));
?>

Ele produz a seguinte saída do navegador -

614
-882