Es gibt viele Antworten auf diese Frage, aber keine davon nutzt einen kryptografisch sicheren Pseudozufallszahlengenerator (CSPRNG).
Die einfache, sichere und richtige Antwort ist, RandomLib zu verwenden und das Rad nicht neu zu erfinden.
Für diejenigen unter Ihnen, die darauf bestehen, Ihre eigene Lösung zu erfinden, bietet PHP 7.0.0 random_int()
diesen Zweck. Wenn Sie noch mit PHP 5.x arbeiten, haben wir eine PHP 5-Polyfüllung für geschrieben,random_int()
damit Sie die neue API verwenden können, noch bevor Sie auf PHP 7 aktualisieren.
Das sichere Generieren zufälliger Ganzzahlen in PHP ist keine triviale Aufgabe. Sie sollten sich immer an Ihre ansässigen StackExchange-Kryptografieexperten wenden, bevor Sie einen selbst entwickelten Algorithmus in der Produktion bereitstellen.
Mit einem sicheren Integer-Generator ist das Generieren einer zufälligen Zeichenfolge mit einem CSPRNG ein Spaziergang im Park.
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 (Ignoriere die PHP 5-Fehler; es wird random_compat benötigt)