14.7. A Better Random Number Generator
Problem
You need a random number with which to generate items such as a sequence of session keys. The random number must be as unpredictable as possible so that the likelihood of predicting the sequence of keys is as low as possible.
Solution
Use the classes
System.Security.Cryptography.RNGCryptoServiceProvider
and System.Random
.
The RNGCryptoServiceProvider
is used to populate a
random byte array using the GetBytes
method that
is then printed out as a string in the following
example:
public static void BetterRandomString( ) { // create a stronger hash code using RNGCryptoServiceProvider byte[] random = new byte[64]; RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider( ); // populate with random bytes rng.GetBytes(random); // convert random bytes to string string randomBase64 = Convert.ToBase64String(random); // display Console.WriteLine("Random string: {0}\r\n ",randomBase64); }
Discussion
Random
provides methods like
Next
, NextBytes
, and
NextDouble
to generate random information for
integers, arrays of bytes, and doubles, respectively. These methods
can produce a moderate level of unpredictability, but to truly
generate a more unpredictable random series, you would want to use
the RNGCryptoServiceProvider
.
RNGCryptoServiceProvider
can be customized to use
any of the underlying Win32 Crypto API providers by passing a
CspParameters
structure in the constructor to determine exactly which provider is responsible for generating the random ...
Get C# Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.