RNGCryptoServiceProvider Class
.NET Framework 4.5
Implements a cryptographic Random Number Generator (RNG) using the implementation provided by the cryptographic service provider (CSP). This class cannot be inherited.
System.Object
System.Security.Cryptography.RandomNumberGenerator
System.Security.Cryptography.RNGCryptoServiceProvider
System.Security.Cryptography.RandomNumberGenerator
System.Security.Cryptography.RNGCryptoServiceProvider
Namespace: System.Security.Cryptography
Assembly: mscorlib (in mscorlib.dll)
The RNGCryptoServiceProvider type exposes the following members.
| Name | Description | |
|---|---|---|
![]() | RNGCryptoServiceProvider() | Initializes a new instance of the RNGCryptoServiceProvider class. |
![]() | RNGCryptoServiceProvider(Byte[]) | Initializes a new instance of the RNGCryptoServiceProvider class. |
![]() | RNGCryptoServiceProvider(CspParameters) | Initializes a new instance of the RNGCryptoServiceProvider class with the specified parameters. |
![]() | RNGCryptoServiceProvider(String) | Initializes a new instance of the RNGCryptoServiceProvider class. |
| Name | Description | |
|---|---|---|
![]() | Dispose() | When overridden in a derived class, releases all resources used by the current instance of the RandomNumberGenerator class. (Inherited from RandomNumberGenerator.) |
![]() | Equals(Object) | Determines whether the specified object is equal to the current object. (Inherited from Object.) |
![]() | GetBytes | Fills an array of bytes with a cryptographically strong sequence of random values. (Overrides RandomNumberGenerator.GetBytes(Byte[]).) |
![]() | GetHashCode | Serves as a hash function for a particular type. (Inherited from Object.) |
![]() | GetNonZeroBytes | Fills an array of bytes with a cryptographically strong sequence of random nonzero values. (Overrides RandomNumberGenerator.GetNonZeroBytes(Byte[]).) |
![]() | GetType | Gets the Type of the current instance. (Inherited from Object.) |
![]() | ToString | Returns a string that represents the current object. (Inherited from Object.) |
The following code example shows how to create a random number with the RNGCryptoServiceProvider class.
//The following sample uses the Cryptography class to simulate the roll of a dice. using System; using System.IO; using System.Text; using System.Security.Cryptography; class RNGCSP { private static RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider(); // Main method. public static void Main() { const int totalRolls = 25000; int[] results = new int[6]; // Roll the dice 25000 times and display // the results to the console. for (int x = 0; x < totalRolls; x++) { byte roll = RollDice((byte)results.Length); results[roll - 1]++; } for (int i = 0; i < results.Length; ++i) { Console.WriteLine("{0}: {1} ({2:p1})", i + 1, results[i], (double)results[i] / (double)totalRolls); } rngCsp.Dispose(); Console.ReadLine(); } // This method simulates a roll of the dice. The input parameter is the // number of sides of the dice. public static byte RollDice(byte numberSides) { if (numberSides <= 0) throw new ArgumentOutOfRangeException("numberSides"); // Create a byte array to hold the random value. byte[] randomNumber = new byte[1]; do { // Fill the array with a random value. rngCsp.GetBytes(randomNumber); } while (!IsFairRoll(randomNumber[0], numberSides)); // Return the random number mod the number // of sides. The possible values are zero- // based, so we add one. return (byte)((randomNumber[0] % numberSides) + 1); } private static bool IsFairRoll(byte roll, byte numSides) { // There are MaxValue / numSides full sets of numbers that can come up // in a single byte. For instance, if we have a 6 sided die, there are // 42 full sets of 1-6 that come up. The 43rd set is incomplete. int fullSetsOfValues = Byte.MaxValue / numSides; // If the roll is within this range of fair values, then we let it continue. // In the 6 sided die case, a roll between 0 and 251 is allowed. (We use // < rather than <= since the = portion allows through an extra 0 value). // 252 through 255 would provide an extra 0, 1, 2, 3 so they are not fair // to use. return roll < numSides * fullSetsOfValues; } }
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
