Pro e contro di RNGCryptoServiceProvider

Quali sono i pro e i contro dell’uso di System.Security.Cryptography.RNGCryptoServiceProvider vs System.Random . So che RNGCryptoServiceProvider è “più casuale”, cioè meno prevedibile per gli hacker. Qualche altro pro o contro?


AGGIORNARE:

Secondo le risposte, ecco i pro e i contro dell’utilizzo di RNGCryptoServiceProvider finora:

Professionisti

  • RNGCryptoServiceProvider è un numero randomizzato crittograficamente più forte, il che significa che sarebbe meglio per determinare le chiavi di crittografia e simili.

Contro

  • Random è più veloce perché è un calcolo più semplice; se utilizzato in simulazioni o lunghi calcoli in cui la casualità crittografica non è importante, dovrebbe essere utilizzata.

Un RNG crittograficamente forte sarà più lento — richiede più calcolo — e sarà spettralmente bianco, ma non sarà adatto alle simulazioni o ai metodi Monte Carlo, sia perché richiedono più tempo, sia perché potrebbero non essere ripetibile, il che è bello per i test.

In generale, si desidera utilizzare un PRNG crittografico quando si desidera un numero univoco come un UUID o una chiave per la crittografia e un PRNG deterministico per la velocità e nella simulazione.

System.Random non è thread-safe.

Sì, ce n’è solo uno in più. Come Charlie Martin ha scritto System.Random è più veloce.

Vorrei aggiungere le seguenti informazioni:

RNGCryptoServiceProvider è l’implementazione predefinita di un generatore di numeri casuali conforms agli standard di sicurezza. Se è necessaria una variabile casuale a scopo di sicurezza, è necessario utilizzare questa class o un equivalente, ma non utilizzare System.Random perché è altamente prevedibile.

Per tutti gli altri usi, le prestazioni più elevate di System.Random e classi equivalenti sono benvenute.