Potrebbe dipendere dal sistema operativo. Immagino che i kernel GNU/Linux recenti possano usare i generatori casuali dell'hardware per es. /dev/random
(poiché la pagina man dello random(4)
suggerisce di utilizzare il rumore), ma potrei sbagliarmi.
La pratica abituale è di utilizzare alcuni comune generatore pseudo-casuale (come ad esempio la funzione standard random(3)
), ma a seme che, quando si inizia l'applicazione, da qualche fonte più casuale (esempio lettura /dev/urandom
, utilizzando getpid()
e qualcosa l'ora corrente con gettimeofday()
, ecc.).
Molto probabilmente, ottenere numeri casuali molto buoni è un'arte nera, almeno per me. Ma la soluzione di cui sopra ha almeno il vantaggio di non essere facilmente riproducibile da una sessione di un'applicazione a un'altra.
Se la tua applicazione è di lunga durata (ad esempio un servizio Web in esecuzione nello stesso processo per molte ore) potresti ri-seminare il tuo Generatore di Numeri Pseudo Casuali di volta in volta. Per un server web, immagino che potresti anche usare i tempi di richiesta (misurandoli con millisecondo granularità) come fonte di casualità (per seminare il tuo PRNG).
fonte
2011-10-26 11:26:17
Quale piattaforma del sistema operativo? Non sarei sorpreso se fosse fatto automaticamente in Linux e Windows, in base alle capacità hardware. – unwind
Sto sviluppando sotto Windows 7, ma il mio progetto usa Qt e finirà per indirizzare sia windows che linux, e se la compatibilità con il cacao Qt verrà risolta presto, si spera anche macOS – dtech
Basta scrivere un po 'di assembly inline per eseguire l'istruzione RDRAND. Oppure attendi che il tuo compilatore supporti l'intrinseco. O meglio ancora, aspetta un paio di anni così avrai qualche probabilità che il tuo utente abbia una macchina che lo supporta. Il manuale è disponibile qui: http://software.intel.com/file/36945 –