PHP 7.2.0 Release Candidate 4 Released

random_bytes

(PHP 7)

random_bytesGenerates cryptographically secure pseudo-random bytes

Descrierea

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.

Sursele de valori aleatorii utilizate pentru această funcție sunt următoarele:

  • Pe Windows se va utiliza întotdeauna » CryptGenRandom().
  • Pe Linux se va utiliza apelul de sistem (syscall) » getrandom(2) dacă este disponibil.
  • Pe alte platforme se va utiliza /dev/urandom.
  • Dacă nici una din sursele menționate nu sunt disponibile, va fi emisă o excepție Exception.

Notă: Cu toate că această funcție a fost adăugată în PHP 7.0, o » implementare în spațiul utilizatorului este disponibilă pentru PHP de la versiunea 5.2 până la 5.6 inclusiv.

Parametri

length

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

Valorile întoarse

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

Erori/Excepții

  • Dacă nu poate fi găsită o sursă potrivită de valori aleatorii, va fi emisă o excepție Exception.
  • Dacă sunt furnizați parametri incorecți, va fi emisă o excepție TypeError.
  • If an invalid length of bytes is given, an Error will be thrown.

Exemple

Example #1 random_bytes() example

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

Exemplul de mai sus va afișa ceva similar cu:

string(10) "385e33f741"

A se vedea și

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