Cryptographically Secure Random Data C# with Example



Cryptographically Secure Random Data C# with Example

There are times when the framework's Random() class may not be considered random enough, given that it is 
based on a psuedo-random number generator. The framework's Crypto classes do, however, provide something 
more robust in the form of RNGCryptoServiceProvider. 
The following code samples demonstrate how to generate Cryptographically Secure byte arrays, strings and 
numbers. 
Random Byte Array 
public static byte[] GenerateRandomData(int length) 
{ 
var rnd = new byte[length]; 
using (var rng = new RNGCryptoServiceProvider()) 
rng.GetBytes(rnd); 
return rnd; 
} 
Random Integer (with even distribution) 
public static int GenerateRandomInt(int minVal=0, int maxVal=100) 
{ 
var rnd = new byte[4]; 
using (var rng = new RNGCryptoServiceProvider()) 
rng.GetBytes(rnd); 
var i = Math.Abs(BitConverter.ToInt32(rnd, 0)); 
return Convert.ToInt32(i % (maxVal - minVal + 1) + minVal); 
} 
Random String 
public static string GenerateRandomString(int length, string allowableChars=null) 
{ 
if (string.IsNullOrEmpty(allowableChars)) 
allowableChars = @"ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
// Generate random data 
var rnd = new byte[length]; 
using (var rng = new RNGCryptoServiceProvider()) 
rng.GetBytes(rnd); 
 

// Generate the output string 
var allowable = allowableChars.ToCharArray(); 
var l = allowable.Length; 
var chars = new char[length]; 
for (var i = 0; i < length; i++) 
chars[i] = allowable[rnd[i] % l]; 
return new string(chars); 
} 

0 Comment's

Comment Form

Submit Comment