System.Security.Cryptography.RandomNumberGenerator
is the base class for Cryptographically-Secure Pseudo-Random Number Generator (CSPRNG) implementations. In .NET Framework RandomNumberGenerator.Create()
returns an RNGCryptoServiceProvider
instance (unless configured differently by CryptoConfig
). In .NET Core RandomNumberGenerator.Create()
returns an opaque type which is based on BCryptGenRandom (Windows) or OpenSSL’s random number generator (!Windows).
RandomNumberGenerator.Create()
is the only way to get an RNG instance on .NET Core, and since it works on both .NET Core and .NET Framework is the most portable.
Of course, if you’re generating an IV, you can also just call the instance method SymmetricAlgorithm.GenerateIV()
to have it use the CSPRNG internally; though as the documentation says, calling it is unnecessary as a random IV is created with the instance (GenerateIV
can be used to force it to generate a new one before the next call to CreateEncryptor
).