Skip to Content
C# Cookbook
book

C# Cookbook

by Stephen Teilhet, Jay Hilyard
January 2004
Beginner to intermediate
864 pages
22h 18m
English
O'Reilly Media, Inc.
Content preview from C# Cookbook

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 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C# Cookbook

C# Cookbook

Joe Mayo
C# Cookbook, 2nd Edition

C# Cookbook, 2nd Edition

Jay Hilyard, Stephen Teilhet
ASP.NET Cookbook

ASP.NET Cookbook

Michael A Kittel, Geoffrey T. LeBlond

Publisher Resources

ISBN: 0596003390Supplemental ContentCatalog PageErrata