using System; namespace IStation.Numerics.Random { public static class RandomSeed { static readonly object Lock = new object(); static readonly System.Security.Cryptography.RandomNumberGenerator MasterRng = System.Security.Cryptography.RandomNumberGenerator.Create(); /// /// Provides a time-dependent seed value, matching the default behavior of System.Random. /// WARNING: There is no randomness in this seed and quick repeated calls can cause /// the same seed value. Do not use for cryptography! /// public static int Time() { return Environment.TickCount; } /// /// Provides a seed based on time and unique GUIDs. /// WARNING: There is only low randomness in this seed, but at least quick repeated /// calls will result in different seed values. Do not use for cryptography! /// public static int Guid() { return Environment.TickCount ^ System.Guid.NewGuid().GetHashCode(); } /// /// Provides a seed based on an internal random number generator (crypto if available), time and unique GUIDs. /// WARNING: There is only medium randomness in this seed, but quick repeated /// calls will result in different seed values. Do not use for cryptography! /// public static int Robust() { lock (Lock) { var bytes = new byte[4]; MasterRng.GetBytes(bytes); return BitConverter.ToInt32(bytes, 0); } } } }