Es gibt viele Antworten auf diese Frage, aber keine von ihnen bringt eine Kryptographisch sicherer Pseudo-Zufallszahlengenerator (CSPRNG).
Die einfache, sichere und richtige Antwort ist die Verwendung von RandomLib und erfinden Sie das Rad nicht neu.
Für diejenigen unter Ihnen, die darauf bestehen, ihre eigene Lösung zu entwickeln, bietet PHP 7.0.0 random_int()
für diesen Zweck; wenn Sie noch PHP 5.x verwenden, haben wir ein PHP 5 Polyfill für random_int()
damit Sie die neue API schon vor dem Upgrade auf PHP 7 nutzen können.
Sichere Erzeugung zufälliger Ganzzahlen in PHP ist keine triviale Aufgabe. Sie sollten sich immer mit Ihre StackExchange-Experten für Kryptographie bevor Sie einen selbstentwickelten Algorithmus in der Produktion einsetzen.
Mit einem sicheren Integer-Generator ist die Erzeugung einer Zufallszeichenfolge mit einem CSPRNG ein Kinderspiel.
Erstellen einer sicheren, zufälligen Zeichenfolge
/**
* Generate a random string, using a cryptographically secure
* pseudorandom number generator (random_int)
*
* This function uses type hints now (PHP 7+ only), but it was originally
* written for PHP 5 as well.
*
* For PHP 7, random_int is a PHP core function
* For PHP 5.x, depends on https://github.com/paragonie/random_compat
*
* @param int $length How many characters do we want?
* @param string $keyspace A string of all possible characters
* to select from
* @return string
*/
function random_str(
int $length = 64,
string $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
): string {
if ($length < 1) {
throw new \RangeException("Length must be a positive integer");
}
$pieces = [];
$max = mb_strlen($keyspace, '8bit') - 1;
for ($i = 0; $i < $length; ++$i) {
$pieces []= $keyspace[random_int(0, $max)];
}
return implode('', $pieces);
}
Verwendung :
$a = random_str(32);
$b = random_str(8, 'abcdefghijklmnopqrstuvwxyz');
$c = random_str();
Demo : https://3v4l.org/IMJGF (Ignorieren Sie die PHP 5-Fehler; es braucht random_compat)