Exemple #1
0
        public string Generate(int passwordLength, PasswordTypeModel passwordType)
        {
            string password = "";

            var symbolsQueue = new List <char>();
            var symbolsPool  = new List <string>()
            {
                LowerL
            };

            TryAddSymbolType(passwordType.IsNumberRequired, symbolsPool, Nums, symbolsQueue);
            TryAddSymbolType(passwordType.IsUpperRequired, symbolsPool, UpperL, symbolsQueue);
            TryAddSymbolType(passwordType.IsSymbolRequired, symbolsPool, Symb, symbolsQueue);

            symbolsQueue.Add(LowerL[_rand.Next(0, LowerL.Length)]);

            // Алгоритм случайной генерации пароля в соответствии с условиями.
            for (int i = 0; i < passwordLength; i++)
            {
                if (symbolsQueue.Count == 0)
                {
                    var randomSymbolsPool = symbolsPool[_rand.Next(0, symbolsPool.Count)];
                    password += randomSymbolsPool[_rand.Next(0, randomSymbolsPool.Length)];

                    continue;
                }

                var symbolIndex = _rand.Next(0, symbolsQueue.Count);
                password += symbolsQueue[symbolIndex];
                symbolsQueue.RemoveAt(symbolIndex);
            }

            return(password);
        }
        // Генерирует пароль.
        private void genButton_Click(object sender, RoutedEventArgs e)
        {
            // Получить желаемую длину пароля из TextBox.
            int passwordLength = 0;

            if (lengthTxtBx.Text != "")
            {
                passwordLength = int.Parse(lengthTxtBx.Text);
            }

            bool isNum        = isNumBox.IsChecked.HasValue ? isNumBox.IsChecked.Value : false;
            bool isUpper      = isUpperBox.IsChecked.HasValue ? isUpperBox.IsChecked.Value : false;
            bool isSymbol     = isSymbBox.IsChecked.HasValue ? isSymbBox.IsChecked.Value : false;
            var  passwordType = new PasswordTypeModel(isNum, isUpper, isSymbol);

            string password = passwordGen.Generate(passwordLength, passwordType);

            // Задать TextBox сгенерированный пароль.
            passTxtBx.Text = password;
        }