Ho bisogno di una sostituzione per la funzione PHP rand()
che utilizza un generatore di numeri casuali crittograficamente forte.replace rand() con openssl_random_pseudo_bytes()
La funzione openssl_random_pseudo_bytes()
consente di accedere al potente generatore di numeri casuali, ma invia i dati come stringa di byte. Invece, ho bisogno di un numero intero compreso tra 0 e X.
Immagino che la chiave sia quella di ottenere l'output di openssl_random_pseudo_bytes()
in un numero intero, quindi si può fare qualsiasi calcolo matematico su di esso che è necessario. Posso pensare ad alcuni modi di "forza bruta" di convertire da una stringa di byte a un intero, ma speravo in qualcosa ... elegante.
mt_rand() darà numeri casuali molto migliore qualità di rand(), ma non è crittograficamente forte sia. – David
attento, questa risposta è sbagliata. per essere più specifici, la parte "% $ range" non è corretta. Prendi il seguente scenario: vuoi generare numeri compresi tra 1 (incluso) e 4 (escluso) (dato che fai max-min). $ range = 3. Ora 3 non si divide uniformemente in 2^8, il che significa che 1 sarà più comune di 3. Stai molto attento, volevi creare un generatore di numeri casuali sicuro ma inavvertitamente reso insicuro, ecco perché si consiglia di utilizzare le implementazioni esistenti. – chacham15
@ chacham15: Se capisci correttamente, in un intervallo di 8 bit ottieni 85 insiemi di [1,2,3] più un singolo [1,] rimasto, facendo sì che un "1" aumenti dell'1,17% rispetto a " 2 "o" 3 ", giusto? Come risolveresti questo problema? Ovviamente l'uso di un'implementazione * * non è un'opzione, o non avrei fatto la domanda. – tylerl