ScotlandPHP

random_bytes

(PHP 7)

random_bytesGenerates cryptographically secure pseudo-random bytes

Descrição

string random_bytes ( int $length )

Generates an arbitrary length string of cryptographic random bytes that are suitable for cryptographic use, such as when generating salts, keys or initialization vectors.

As fontes de aleatoriedade dessa função são:

  • No Windows, a função » CryptGenRandom() sempre será utilizada.
  • No Linux, a syscall » getrandom(2) será utilizada se disponível.
  • Em outras plataformas /dev/urandom será utilizada.
  • Se nenhuma das fontes acima estiver disponível, então uma Exception será lançada.

Nota: Embora essa função tenha sido adicionado no PHP 7.0, existe » implementação userland disponível para PHP 5.2 ao 5.6.

Parâmetros

length

The length of the random string that should be returned in bytes.

Valor Retornado

Returns a string containing the requested number of cryptographically secure random bytes.

Erros

  • Se uma fonte de aleatoriedade não for encontrada uma Exception será lançada.
  • No caso de parâmetros inválidos um TypeError será lançado.
  • If an invalid length of bytes is given, an Error will be thrown.

Exemplos

Exemplo #1 random_bytes() example

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

O exemplo acima irá imprimir algo similar à:

string(10) "385e33f741"

Veja Também

add a note add a note

User Contributed Notes 1 note

up
11
akam at akameng dot com
1 year ago
I used below function to create random token, and also a salt from the token. I used it in my application to prevent CSRF attack.

<?php
function RandomToken($length = 32){
    if(!isset(
$length) || intval($length) <= 8 ){
     
$length = 32;
    }
    if (
function_exists('random_bytes')) {
        return
bin2hex(random_bytes($length));
    }
    if (
function_exists('mcrypt_create_iv')) {
        return
bin2hex(mcrypt_create_iv($length, MCRYPT_DEV_URANDOM));
    }
    if (
function_exists('openssl_random_pseudo_bytes')) {
        return
bin2hex(openssl_random_pseudo_bytes($length));
    }
}

function
Salt(){
    return
substr(strtr(base64_encode(hex2bin(RandomToken(32))), '+', '.'), 0, 44);
}

echo (
RandomToken());
echo
"\n";
echo
Salt();
echo
"\n";

/*
This function is same as above but its only used for debugging
*/
function RandomTokenDebug($length = 32){
    if(!isset(
$length) || intval($length) <= 8 ){
     
$length = 32;
    }
   
$randoms = array();
    if (
function_exists('random_bytes')) {
       
$randoms['random_bytes'] = bin2hex(random_bytes($length));
    }
    if (
function_exists('mcrypt_create_iv')) {
       
$randoms['mcrypt_create_iv'] = bin2hex(mcrypt_create_iv($length, MCRYPT_DEV_URANDOM));
    }
    if (
function_exists('openssl_random_pseudo_bytes')) {
       
$randoms['openssl_random_pseudo_bytes'] = bin2hex(openssl_random_pseudo_bytes($length));
    }
   
    return
$randoms;
}
echo
"\n";
print_r (RandomTokenDebug());

?>
To Top