/// <summary>
        /// Returns a shuffled IEnumerable.
        /// </summary>
        /// <typeparam name="T">The type of object being enumerated</typeparam>
        /// <param name="rand">An instance of a random number generator</param>
        /// <returns>A shuffled shallow copy of the source items</returns>
        public static IEnumerable <T> Shuffle <T>(this IEnumerable <T> source, CryptoRandomGenerator rand)
        {
            var list = source.ToList();

            list.Shuffle(rand);
            return(list);
        }
 /// <summary>
 /// Returns a random element from a list, or null if the list is empty.
 /// </summary>
 /// <typeparam name="T">The type of object being enumerated</typeparam>
 /// <param name="rand">An instance of a random number generator</param>
 /// <returns>A random element from a list, or null if the list is empty</returns>
 public static T Random <T>(this IEnumerable <T> list, CryptoRandomGenerator rand)
 {
     if (list != null && list.Count() > 0)
     {
         return(list.ElementAt(rand.Next(list.Count())));
     }
     return(default(T));
 }
        /// <summary>
        /// Shuffles an IList in place.
        /// </summary>
        /// <typeparam name="T">The type of elements in the list</typeparam>
        /// <param name="rand">An instance of a random number generator</param>
        public static void Shuffle <T>(this IList <T> list, CryptoRandomGenerator rand)
        {
            int count = list.Count;

            while (count > 1)
            {
                int i    = rand.Next(count--);
                T   temp = list[count];
                list[count] = list[i];
                list[i]     = temp;
            }
        }
示例#4
0
        public void Test()
        {
            //var lemerRandomGenerator = new GPSSRandomGenerator(3729);
            ////var lemerRandomGenerator = new SequenceMethodRandomGenerator(100011);
            //var lemerRandomGenerator = new LemerRandomGenerator(100011);
            var lemerRandomGenerator = new CryptoRandomGenerator();
            //var uniformTest = new PokerTest(0, 9, 100);
            var uniformTest = new IntervalTest(0, 10, 10000, 500);

            for (var i = 0; i < 5; i++)
            {
                Console.WriteLine(uniformTest.Check(lemerRandomGenerator));
            }
        }
        public static string NewSecurePassword()
        {
            var UpperCharsSet   = Enumerable.Range(65, 26).Select(i => (byte)i).ToArray(); // A..Z
            var LowerCharsSet   = Enumerable.Range(97, 26).Select(i => (byte)i).ToArray(); // a..z
            var NumbersSet      = Enumerable.Range(48, 10).Select(i => (byte)i).ToArray(); // 0..9
            var SpecialCharsSet = new byte[] { 33, 35, 40, 41, 64 };                       // !, #, (, ), @
            var All             = UpperCharsSet.Concat(LowerCharsSet).Concat(NumbersSet).Concat(SpecialCharsSet).ToArray();

            using (var r = new CryptoRandomGenerator())
            {
                int length = r.Next(32, 41);
                var u      = Enumerable.Range(0, 5).Select(i => UpperCharsSet[r.Next(0, UpperCharsSet.Length)]);
                var l      = Enumerable.Range(0, 1).Select(i => LowerCharsSet[r.Next(0, LowerCharsSet.Length)]);
                var n      = Enumerable.Range(0, 1).Select(i => NumbersSet[r.Next(0, NumbersSet.Length)]);
                var s      = Enumerable.Range(0, 4).Select(i => SpecialCharsSet[r.Next(0, SpecialCharsSet.Length)]);
                var a      = Enumerable.Range(0, length - 11).Select(i => All[r.Next(0, All.Length)]);
                return(Encoding.ASCII.GetString(u.Concat(l).Concat(n).Concat(s).Concat(a).Shuffle().ToArray()));
            }
        }