ich einen Ersatz für rand()
Funktion PHP benötigen, die eine kryptographisch starke Zufallszahlengenerator verwendet.rand() mit openssl_random_pseudo_bytes() ersetzen
Die openssl_random_pseudo_bytes()
Funktion bekommt man den starken Generator Zufallszahl zugreifen, aber es gibt seine Daten als Byte-String. Stattdessen brauche ich eine ganze Zahl zwischen 0 und X.
Ich stelle mir vor, der Schlüssel ist, um die Ausgabe von openssl_random_pseudo_bytes()
in eine ganze Zahl zu bekommen, dann können Sie jede Mathe auf sie tun, die Sie benötigen. Ich kann mir ein paar "Brute-Force-Wege" vorstellen, wie man aus einer Byte-Zeichenkette in eine Ganzzahl konvertiert, aber ich habe auf etwas ... elegantes gehofft.
mt_rand() geben viel bessere Qualität als Zufallszahlen rand(), aber es ist nicht verschlüsselt entweder stark. – David
Vorsicht, diese Antwort ist falsch. genauer gesagt, der Teil "% $ range" ist falsch. Nehmen Sie das folgende Szenario: Sie möchten Zahlen zwischen 1 (einschließlich) und 4 (ausschließlich) generieren (da Sie max-min ausführen). $ range = 3. Jetzt teilt sich 3 nicht gleichmäßig in 2^8, was bedeutet, dass 1 häufiger als 3 sein wird. Sei sehr vorsichtig, du wolltest einen sicheren Zufallszahlengenerator machen, aber hast ihn versehentlich unsicher gemacht, deshalb Es wird empfohlen, vorhandene Implementierungen zu verwenden. – chacham15
@ chacham15: Wenn Sie richtig verstehen, erhalten Sie in einem 8-Bit-Bereich 85 Sätze [1,2,3] plus eine einzelne [1,] übrig, was eine "1" um 1,17% wahrscheinlicher macht als " 2 "oder" 3 ", oder? Wie würdest du dieses Problem lösen? Natürlich ist die Verwendung einer * vorhandenen Implementierung * keine Option, oder ich hätte die Frage nicht gestellt. – tylerl