random_bytes

(PHP 7, PHP 8)

random_bytesGet cryptographically secure random bytes

Beschreibung

random_bytes(int $length): string

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

Die Zufallsquellen in der Reihenfolge ihrer Priorität sind folgende:

  • Linux: » getrandom(), /dev/urandom

  • FreeBSD >= 12 (PHP >= 7.3): » getrandom(), /dev/urandom

  • Windows (PHP >= 7.2): » CNG-API

    Windows: » CryptGenRandom

  • macOS (PHP >= 8.2; >= 8.1.9; >= 8.0.22 wenn CCRandomGenerateBytes bei der Kompilierung verfügbar ist): CCRandomGenerateBytes()

    macOS (PHP >= 8.1; >= 8.0.2): arc4random_buf(), /dev/urandom

  • NetBSD >= 7 (PHP >= 7.1; >= 7.0.1): arc4random_buf(), /dev/urandom

  • OpenBSD >= 5.5 (PHP >= 7.1; >= 7.0.1): arc4random_buf(), /dev/urandom

  • DragonflyBSD (PHP >= 8.1): » getrandom(), /dev/urandom

  • Solaris (PHP >= 8.1): » getrandom(), /dev/urandom

  • Jede beliebige Kombination von Betriebssystem und PHP-Version, die oben nicht erwähnt wurde: /dev/urandom
  • Wenn keine der Quellen verfügbar ist oder keine davon Zufälligkeit erzeugen kann, wird eine Random\RandomException ausgelöst.

Hinweis: Obwohl diese Funktion erst mit PHP 7.0.0 in PHP hinzugefügt wurde, gibt es » Userland-Implementierungen für PHP 5.2 bis einschließlich 5.6.

Parameter-Liste

length

The length of the random string that should be returned in bytes; must be 1 or greater.

Rückgabewerte

A string containing the requested number of cryptographically secure random bytes.

Fehler/Exceptions

  • Wenn keine angemessene Quelle für Zufallszahlen verfügbar ist, wird eine Random\RandomException geworfen.
  • If the value of length is less than 1, a ValueError will be thrown.

Changelog

Version Beschreibung
8.2.0 In case of a CSPRNG failure, this function will now throw a Random\RandomException. Previously a plain Exception was thrown.

Beispiele

Beispiel #1 random_bytes() example

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

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

string(10) "385e33f741"

Siehe auch

add a note

User Contributed Notes 1 note

up
5
ccbsschucko at gmail dot com
5 years ago
<?php
   
function str_rand(int $length = 64){ // 64 = 32
       
$length = ($length < 4) ? 4 : $length;
        return
bin2hex(random_bytes(($length-($length%2))/2));
    }
   
   
var_dump(str_rand());
   
// d6199909d0b5fdc22c9db625e4edf0d6da2b113b21878cde19e96f4afe69e714
?>
To Top