The Pitfalls of System.Random
When it comes to random number generators in .NET, there's two options: System.Random and the easy to say System.Security.Cryptography.RNGCryptoServiceProvider. The former is a pseudo random number generator (PRNG), while the latter is a cryptographically secure random number generator (CSRNG). Common wisdom is to use Random
, since it's faster and friendlier than RNGCryptoServiceProvider
while still providing random numbers that are good enough for casual use. Unfortunately, Random
is not as random as you'd like, performance leaves a lot on the table, and the API isn't nearly as nice once you get to know it.