генерация пакета случайных паролей - PullRequest
1 голос
/ 28 сентября 2010

Создать случайный пароль очень просто.но генерировать партию сложнее.

    public static string getRandomPassword(int letters, int getallen) {
        //int letters = 8;
        //int getallen = 5;

        char[] letterdeel = new char[letters];
        int minGetal = (int)Math.Pow(10, getallen - 1);
        int maxGetal = (int)Math.Pow(10, getallen);

        string password;
        Random r = new Random();
        int test = (int)(DateTime.Now.Ticks);
        for (int i = 0; i < letters; i++) {
            r = new Random((int)(DateTime.Now.Ticks) + i);
            bool capital = r.Next(2) == 0 ? true : false;
            if (capital) {
                letterdeel[i] = (char)r.Next(65, 91);
            } else {
                letterdeel[i] = (char)r.Next(97, 123);
            }
        }

        password = new string(letterdeel);
        password += r.Next(minGetal, maxGetal);

        return password;
    }

это мой метод, пароли должны быть в определенном формате букв и цифр.это работает нормально, однако, если у меня есть цикл for, извлекающий 100 паролей из этого метода, в моем массиве у меня 5-8 одинаковых паролей, затем снова 5-8 одинаковых проходов.

я знаю ПОЧЕМУэто из-за случайной функции и часов, от которых она зависит, но как мне это исправить?

Ответы [ 3 ]

5 голосов
/ 28 сентября 2010

Переместите Random r за пределы метода, если вы неоднократно вызываете его.Вы будете наносить удары несколько раз за один и тот же период времени, поэтому вы будете генерировать одни и те же семена.Вы также хотите избавиться от строки ниже.Это не нужно, и (опять же) с природой DateTime.Now , вы просто продолжите генерировать ту же последовательность «случайных» чисел.

r = new Random((int)(DateTime.Now.Ticks) + i); 
2 голосов
/ 28 сентября 2010

Определите генератор случайных чисел как статический вне функции.

Как получить истинную случайность в этом классе без Thread.Sleep (300)?

0 голосов
/ 28 сентября 2010

Используйте набор, а не коллекцию, в которой вы храните, и не повторяйте ее 100 раз, пока в наборе не будет 100 элементов.

...