public static class RandomGenerator { private static readonly RandomNumberGenerator generator = RandomNumberGenerator.Create(); public static int GetNext() { byte[] rndArray = new byte[4]; generator.GetBytes(rndArray); return BitConverter.ToInt32(rndArray, 0); } public static int GetNext(int minValue, int maxValue) { if (maxValue < minValue) throw new InvalidOperationException("maxValue has to be greater than minValue"); byte[] rndArray = new byte[4]; generator.GetBytes(rndArray); int randomNumber = BitConverter.ToInt32(rndArray, 0); var mod = Math.Abs(randomNumber) % (maxValue - minValue + 1); return minValue + mod; } public static uint GetNextUnsigned() { byte[] rndArray = new byte[4]; generator.GetBytes(rndArray); return BitConverter.ToUInt32(rndArray, 0); } public static uint GetNextUnsigned(uint minValue, uint maxValue) { if (maxValue < minValue) throw new InvalidOperationException("maxValue has to be greater than minValue"); byte[] rndArray = new byte[4]; generator.GetBytes(rndArray); return minValue + (BitConverter.ToUInt32(rndArray, 0) % (maxValue - minValue + 1)); } }