diff --git a/Libraries/Core/Utils/RandomUtil.cs b/Libraries/Core/Utils/RandomUtil.cs index 747d6957..b66e372a 100644 --- a/Libraries/Core/Utils/RandomUtil.cs +++ b/Libraries/Core/Utils/RandomUtil.cs @@ -418,19 +418,21 @@ public class RandomUtil /// A secure random number between 0 (inclusive) and 1 (exclusive). private static double GetSecureRandomNumber() { - var buffer = new byte[6]; + byte[] buffer = new byte[6]; // 48 bits + using (RandomNumberGenerator rng = RandomNumberGenerator.Create()) + { + rng.GetBytes(buffer); + } - using var rng = RandomNumberGenerator.Create(); + // Convert the byte array to unsigned long + ulong integer = 0; + for (int i = 0; i < buffer.Length; i++) + { + integer |= (ulong)buffer[i] << (8 * (buffer.Length - 1 - i)); + } - // Fill buffer with random bytes - rng.GetBytes(buffer); - - var integer = 0; - for (var i = 0; i < 6; i++) integer = (integer << 8) | buffer[i]; - - const ulong maxInt = 1UL << 48; - - return (double)Math.Abs(integer) / maxInt; + const ulong maxInteger = 281474976710656; // 2^48 + return (double)integer / maxInteger; } ///