Seit PHP Version 5.3.0 gibt es die Funktion openssl_random_pseudo_bytes()
.
Ich möchte euch nun eine Lösung vorstellen wie man nur mit openssl_random_pseudo_bytes()
einen Zufallsstring generieren kann.
function randomString($length=64, $chars='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')
{
if ($length < 1 || strlen($chars) < 2) {
return false;
}
// Initialize
$result = "";
$fullCharset = "";
$strong = false;
// Expand our charset to minimum 255 Chars
while (strlen($fullCharset) < 255) {
$fullCharset .= str_shuffle($chars);
}
// Generate the random bytes
$randomBytes = openssl_random_pseudo_bytes($length, $strong);
if ($randomBytes && $strong) {
// Map the random bytes to our charset
for ($i = 0; $i < $length; $i++) {
$byteDecimal = hexdec(bin2hex($randomBytes{$i}));
$result .= $fullCharset{$byteDecimal};
}
if (strlen($result) != $length) {
return false;
}
return $result;
}
return false;
}
Natürlich mit einer kurzen Erklärung 🙂 Zunächst erstellen wir den String $fullCharset
mit mindestens 255 Zeichen aus eurem Alphabet, in dem wir $chars
immer wieder aneinanderhängen. (Zeile 7). Dann generieren wir uns die zufälligen Bytes, openssl_random_pseudo_bytes()
erwartet als Parameter die Anzahl der zu generierenden Bytes. Ein Byte hat als Dezimalzahl dargestellt einen Wert zwischen 0 und 255. Einfacher gesagt, generieren wir uns also $length
Zahlen in diesem Bereich. Da wir unser Alphabet zuvor auf 255 Zeichen erweitert haben "mappen" wir jetzt jedes zufällig generierte Byte auf die jeweilige Position im String $fullCharset
No Responses