Поиск по этому блогу

воскресенье, 29 апреля 2012 г.

Генератор паролей на основе RNGCryptoServiceProvider

Увидел в одном блоге, интересный пример генератора паролей. Мне лично такие варианты ещё не попадались. Вот  решил его разместить у себя в блоге.
На форму нужно кинуть Label, 2 TextBox'a, 1 Buttom. Размещаем в любом порядке, а дальше код.


private void button1_Click(object sender, EventArgs e)
        {
            if (Convert.ToInt32(textBox1.Text) < 35)
            {
                try
                {
                    //try говорит о ошибке в определённом куске, чтобы её отловить
                    // Вызов функции или выполнение каких-то иных
                    // действий, которые могут генерировать исключение
                    textBox2.Clear();
                    byte[] temp = Generator.RollDice(Convert.ToInt32(textBox1.Text));
                    for (int i = 0; i < temp.Length; i++)
                    {
                        textBox2.Text += (char)temp[i];
                    }
                }
                catch (Exception ex)
                {
                    //catch - выводит сообщение о ошибке возникшей в try
                    // Сюда управление передается в случае, когда в блоке
                    // try сгенерировано исключение — в самом ли блоке, в
                    // функции, которая в нем вызывается, в функции,
                    // которая вызывается функцией, вызванной в try-блоке
                    // и так далее — словом, где угодно. Объект Exception
                    // описывает ошибку
                    MessageBox.Show(ex.Message);
                }
            }
            else
                MessageBox.Show("Введите число меньше 35!!!");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //по умолчанию в текстбоксе будет стоять значение 16
            textBox1.Text = "16";
        }



Создаётся класс и потом программа будет работать.


class Generator
    {
        public static byte[] RollDice(int passLenght)
        {
            byte[] randomNumber = new byte[passLenght];
            byte[] password = new byte[passLenght];


            // Создайте новый экземпляр RNGCryptoServiceProvider
            RNGCryptoServiceProvider Gen = new RNGCryptoServiceProvider();

            // Заполняем массив случайными значениями
            Gen.GetBytes(randomNumber);

            for (int i = 0; i < randomNumber.Length; i++)
            {
                if ((int)randomNumber[i] > 48 && (int)randomNumber[i] < 57 ||
                    (int)randomNumber[i] > 65 && (int)randomNumber[i] < 90 ||
                    (int)randomNumber[i] > 97 && (int)randomNumber[i] < 122)
                {
                    password[i] = randomNumber[i];
                }
                else
                {
                    Gen.GetBytes(randomNumber);
                    i--;
                }
            }
            return password;
        }
    }

2 комментария:

  1. Ты просто супер. Я мудохался с кучей сайтов и нигде не мог найти нормального. Спасибо тебе. 10/10.

    ОтветитьУдалить